Подскажите как правильнее - UINON ALL или PIVOT?

waszkiewicz
Дата: 26.01.2013 16:56:10
Для примера таблица
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
waszkiewicz
Дата: 26.01.2013 16:57:49
Балин, UNION пропустил.
qwerty112
Дата: 26.01.2013 17:15:34
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

с таким запросом уже можно про "выгоднее"/"не выгоднее" говорить
... и скорее всего - разницы - никакой нет ...
Ennor Tiegael
Дата: 27.01.2013 00:10:42
Если у вас именно отчет, то лучше использовать шаблон matrix report - он сам разворачивает строки в столбцы. Причем, что самое главное, ему пофиг, сколько у вас сегодня станций, в отличие от вашего запроса.