日期 早上 中午 晚上 零晨 金額小計
2006-01-02 50 20 30 40 140
2006-01-03 40 60 50 50 200
2006-01-04 80 60 30 20 190
..........
..........
--SQL 20005中的處理方式:
--測試環境
Create table T(日期 datetime,時間 varchar(20),售貨金額 int)
insert into T select '2006-01-02','早上',50
union all select '2006-01-02','中午',20
union all select '2006-01-02','晚上',30
union all select '2006-01-02','零晨',40
union all select '2006-01-03','早上',40
union all select '2006-01-03','中午',60
union all select '2006-01-03','晚上',50
union all select '2006-01-03','零晨',50
union all select '2006-01-04','早上',80
union all select '2006-01-04','中午',60
union all select '2006-01-04','晚上',20
union all select '2006-01-04','零晨',40
--查詢
select * ,金額小計=(select sum(售貨金額) from T where 日期=PT.日期 ) from T as TAB
PIVOT
( max(售貨金額)
for 時間 in ([早上],[中午],[晚上],[零晨])
) as PT
--結果
/*
日期 早上 中午 晚上 零晨 金額小計
----------------------- ----------- ----------- ----------- ----------- -----------
2006-01-02 00:00:00.000 50 20 30 40 140
2006-01-03 00:00:00.000 40 60 50 50 200
2006-01-04 00:00:00.000 80 60 20 40 200
(3 行受影響)
*/
--刪除測試環境
Drop Table T
---動態SQL
DECLARE @S VARCHAR(MAX)
SET @S=''
SELECT @S=@S+',['+時間+']' FROM T
GROUP BY 時間
SET @S=STUFF(@S,1,1,'')
EXEC('
select 日期,'+@S+',金額小計=(select sum(售貨金額) from T where 日期=PT.日期 ) from T as TAB
PIVOT
( max(售貨金額)
for 時間 in ('+@S+')
) as PT
')