基于1列的值输出多个列的SQL查询
几个小时以来,我一直在用头撞墙。我已经设法将我需要的所有数据下放到一个表中,但我就是不知道如何编写select语句,所以输出就是我想要的方式 基本上我有一张桌子:基于1列的值输出多个列的SQL查询,sql,sql-server-2008,select,group-by,pivot,Sql,Sql Server 2008,Select,Group By,Pivot,几个小时以来,我一直在用头撞墙。我已经设法将我需要的所有数据下放到一个表中,但我就是不知道如何编写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月)没有项目,则为空 查询的输出: ID| JAN |FEB |
ID| Date | Cost
a 03/11 5
a 02/11 4
b 01/11 3
b 04/11 7
更改查询列输出的列是日期列。我希望能够将所有ID分组在一起,每一行都包含ID和每月与该ID相关的每个项目的成本,如果当月(从1月到12月)没有项目,则为空
查询的输出:
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
任何正确方向上的帮助都将不胜感激
谢谢。您的日期是否真的存储为2011年3月(字符串)月份(字段名在此)。。。这应该会给你指出正确的方向…@J W,不…。这只是一个例子@MaxOvrdrv,我能够确定日期的月份。我很难按照我描述的方式使用这些信息。非常感谢Richard,这正是我想要的。因此,我去读了一些关于枢轴的书。对于其他遇到类似问题的人,这里有一个很好的链接:再次感谢Richard!
;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