Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите как правильнее - UINON ALL или PIVOT?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Для примера таблица
CREATE TABLE [dbo].[Table_1](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[station] [int] NOT NULL,
	[action] [datetime] NOT NULL,
	[amount] [real] NOT NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]


Мечтается получить отчет такого плана

action/station 1 2 3
26.01.13 00:00:00 25,0 (null) (null)
26.01.13 01:00:00 (null) 100500,1 (null)
26.01.13 02:00:00 25,6 (null) 45,6


Как сделать?
select act , sum(am1) [1] ,sum(am2) [2] ,sum(am3) [3] from
(select action act, amount am1, 0, 0 from Table1 where station=1
select action act, 0, amount am2, 0 from Table1 where station=2
select action act, 0,0, amount am3 from Table1 where station=3) tt
group by act

Или PIVOT будет выгоднее?
SQL Server 2008
26 янв 13, 16:56    [13833302]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильнее - UINON ALL или PIVOT?  [new]
waszkiewicz
Member

Откуда:
Сообщений: 1086
Балин, UNION пропустил.
26 янв 13, 16:57    [13833306]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильнее - UINON ALL или PIVOT?  [new]
qwerty112
Guest
waszkiewicz
Мечтается получить отчет такого плана

action/station 1 2 3
26.01.13 00:00:00 25,0 (null) (null)
26.01.13 01:00:00 (null) 100500,1 (null)
26.01.13 02:00:00 25,6 (null) 45,6


Как сделать?
select act , sum(am1) [1] ,sum(am2) [2] ,sum(am3) [3] from
(select action act, amount am1, 0, 0 from Table1 where station=1
select action act, 0, amount am2, 0 from Table1 where station=2
select action act, 0,0, amount am3 from Table1 where station=3) tt
group by act

Или PIVOT будет выгоднее?
SQL Server 2008

конечно, PIVOT будет лучше того, что вы придумали

вы его (PIVOT) просто неправильно "заменяете"
так было нужно
select act , 
sum(case when station=1 then amount end) [1] ,
sum(case when station=2 then amount end) [2] ,
sum(case when station=3 then amount end) [3] 
from Table1
group by act

с таким запросом уже можно про "выгоднее"/"не выгоднее" говорить
... и скорее всего - разницы - никакой нет ...
26 янв 13, 17:15    [13833345]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как правильнее - UINON ALL или PIVOT?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Если у вас именно отчет, то лучше использовать шаблон matrix report - он сам разворачивает строки в столбцы. Причем, что самое главное, ему пофиг, сколько у вас сегодня станций, в отличие от вашего запроса.
27 янв 13, 00:10    [13834671]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить