【问题标题】:SQL query to output multiple columns based on the value of 1 columnSQL查询根据1列的值输出多列
【发布时间】:2013-04-05 02:22:00
【问题描述】:

我已经为此撞墙了几个小时。我已经设法将我需要的所有数据放到 1 个表中,但我就是不知道如何编写一个 select 语句,所以输出是我想要的方式。

基本上我有一张桌子:

ID| Date | Cost
a  03/11   5
a  02/11   4
b  01/11   3
b  04/11   7

更改查询列输出的列是日期列。我希望能够将所有 ID 组合在一起,每行包含 ID 和与该 ID 相关的每个项目每月的成本,如果当月没有项目(从 1 月到 12 月),则为 null

查询输出:

ID| JAN |FEB | MARCH | APR | MAY | JUN | JUL |......| OCT | NOV | DEC
a   NULL  4      5      NULL NULL.................................NULL
b   3    NULL   NULL     7   NULL.................................NULL

对正确方向的任何帮助表示赞赏!

谢谢。

【问题讨论】:

  • 你的日期真的存储为03/11 (string)
  • Month(fieldnamehere)... 这应该为您指明正确的方向...
  • @ J W,不..这只是@ MaxOvrdrv 的一个例子,我能够确定日期属于哪个月份。我无法按照我所描述的方式使用该信息。

标签: sql sql-server-2008 select group-by pivot


【解决方案1】:
;with data(ID, Date, Cost) as (
    select 'a', '20110311', 5 union all
    select 'a', '20110211', 4 union all
    select 'b', '20110111', 3 union all
    select 'b', '20110411', 7
)
--- the above just creates a virtual dataset named data.
--- Your query starts below here

select *
  from
    (
    select ID, left(upper(datename(month,Date)),3) Month_, Cost
    from data
    ) p
 pivot (sum(Cost) for Month_ in ([Jan],[Feb],[Mar],[Apr],[May],[Jun],[Jul],[Aug],[Sep],[Oct],[Nov],[Dec])) v

【讨论】:

  • 非常感谢理查德,正是我想要的。结果,我去阅读了一些关于枢轴的文章。对于遇到此类问题的其他人,这是一个很好的链接:blogs.msdn.com/b/spike/archive/2009/03/03/… 再次感谢 Richard!
猜你喜欢
  • 2017-07-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 2019-05-27
  • 1970-01-01
相关资源
最近更新 更多