Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于1列的值输出多个列的SQL查询_Sql_Sql Server 2008_Select_Group By_Pivot - Fatal编程技术网

基于1列的值输出多个列的SQL查询

基于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 |

几个小时以来,我一直在用头撞墙。我已经设法将我需要的所有数据下放到一个表中,但我就是不知道如何编写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 | 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