2013-04-05 79 views
0

我一直在这里抨击我的头靠在墙上几个小时。我已经设法将所有需要的数据下载到1个表中,但我无法弄清楚如何编写select语句,以便按照我的要求输出。根据1列的值输出多列的SQL查询

基本上我有一个表:

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

改变所述查询列输出的列是日期列。我希望能够将所有ID组合在一起,每行包含与该ID相关的每个项目的ID和每个项目的成本,或者如果当月没有项目(从1月1日起),则为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 

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

谢谢。

+0

的日期真的存储为'03/11'(*字符串*) – 2013-04-05 02:24:14

+0

月(fieldnamehere)......这应该指向你在正确的方向... – MaxOvrdrv 2013-04-05 02:28:27

+0

@ JW,no..this是只是一个例子 @ MaxOvrdrv,我能够确定一个日期所属的月份。我以我描述的方式使用这些信息时遇到了麻烦。 – JohnnySaxx 2013-04-05 02:34:35

回答

2
;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 
+0

非常感谢Richard,正是我在寻找的东西。 因此,我已经做了一些关于枢轴的阅读。对于遇到类似问题的任何人,这里是一个很好的链接: http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a -simple-sample.aspx 再次,谢谢理查德! – JohnnySaxx 2013-04-05 03:38:27