SQL选择组数据

时间:2017-09-03 16:31:09

标签: sql sql-server

我有一个包含以下结构的表

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

1 个答案:

答案 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