我有一个包含以下结构的表
Name Data Month
A 100 2016-01
A 120 2016-03
A 120 2016-04
A 150 2016-05
B 100 2016-03
如何让最终结果在开始月份和结束月份之间变为低于2016-01至2016-05使用SQL是否有可能?
Name 2016-01 2016-02 2016-03 2016-04 2016-05
A 100 0 120 120 150
B 0 0 100 0 0
我做了一些实验,但无法完成这项工作。这是我试过的代码
select *
from
(
select id, isnull(price,0), [PERIOD]
from price_table
) a
pivot
(
max(price)
for [PERIOD] in ([2010-01-01],[2010-02-01])
) p
错误" Msg 8155,Level 16,State 2,Line 10 没有为' a'的第2列指定列名。 Msg 207,Level 16,State 1,Line 12 列名称无效'价格'。"
请注意,我的查询中的起始月份和结束月份是可变的,月份将动态添加更多,并不是2016-01至2016-05
答案 0 :(得分:2)
根据您的示例数据,PIVOT查询将在
之下SELECT name,
ISNULL([2016-01],0) [2016-01],
ISNULL([2016-02],0) [2016-02],
ISNULL([2016-03],0) [2016-03],
ISNULL([2016-04],0) [2016-04],
ISNULL([2016-05],0) [2016-05]
FROM t_data
PIVOT (SUM(data)
FOR [month] IN ([2016-01], [2016-02], [2016-03], [2016-04], [2016-05])
) p
结果
name 2016-01 2016-02 2016-03 2016-04 2016-05
A 100 0 120 120 150
B 0 0 100 0 0