我有一张这样的表
item value date
-----------------------
a 8.9 20170101
b 10.3 20170114
a 3.4 20170111
c 13.4 20170121
b 8.3 20170111
b 1.0 20170312
我想运行一些选择让它像这样显示
20170101 20170111 20170114 20170121 20170312
a 8.9 3.4
b 8.3 10.3 1.0
c 13.4
这在T-SQL中是否可行?
迪安-O
答案 0 :(得分:2)
这可以使用数据透视表来完成。
如果您知道可以使用的所有日期:
select * from(select item,value,date from pivotExample) ot
pivot(sum(value) for date in ([20170101],[20170111],[20170114],[20170121],[20170312])) pt
如果您不知道日期,可以使用以下方式动态生成:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(date)
from pivotExample
group by date
order by date
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT item,' + @cols + ' from
(
select item,value,date
from pivotExample
) x
pivot
(
sum(value)
for date in (' + @cols + ')
) p '
execute(@query);