Sql 使用字段在多个列标题中透视

Sql 使用字段在多个列标题中透视,sql,sql-server,sql-server-2008,pivot,Sql,Sql Server,Sql Server 2008,Pivot,我有以下使用PIVOT命令的基本SQL语句 SELECT * FROM ( --select statement that creates my dataset ) s PIVOT (Max(incidentcount) for dept in ([dept1],[dept2])) p 这就是我期望它做的,它给了我一个以部门为列的每个原因的事件计数。我的问题是我在专栏中使用的部门从1到60。 无论如何,我可以告诉查询使用列Department填充PIVOT in部分。显然,我希望避免手动

我有以下使用PIVOT命令的基本SQL语句

SELECT *
FROM

(
--select statement that creates my dataset 
) s

PIVOT (Max(incidentcount) for dept in ([dept1],[dept2])) p
这就是我期望它做的,它给了我一个以部门为列的每个原因的事件计数。我的问题是我在专栏中使用的部门从1到60。 无论如何,我可以告诉查询使用列
Department
填充
PIVOT in
部分。显然,我希望避免手动键入每个部门

编辑

这是创建我在pivot中使用的数据集的sql

SELECT Details, Department , count(*) NoIncidents
  FROM myincidentdb
  Group by Details,  Department
编辑2


您将希望使用动态sql来透视此,您的代码将类似于此:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(dept) 
                    from yourtablewithDepartments
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT *
              from 
              (
                <your query goes here>
              ) src
              pivot 
              (
                max(incidentcount)
                for dept in (' + @cols + ')
              ) piv '

execute(@query)

请参见

您将希望使用动态sql来透视此,您的代码将类似于此:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(dept) 
                    from yourtablewithDepartments
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT *
              from 
              (
                <your query goes here>
              ) src
              pivot 
              (
                max(incidentcount)
                for dept in (' + @cols + ')
              ) piv '

execute(@query)

请参见

添加了创建我的数据集的sql语句。能否发布一些示例数据?甚至创建一个SqlFIDLE。我在运行SQL时添加了一个示例结果集,示例中只显示了6个部门,但还有更多,细节相同。@SelectDistinct请查看我的编辑,我还做了一个小小的修改,这样您就不需要使用两个聚合函数。您的第二个查询实际上不需要选择两次
Department
。可以在
pivot
中引用同一列两次,即(…)中部门的
计数(部门)
。(我想我在查询中做到了这一点,没有问题。)我添加了创建数据集的sql语句。你能发布一些示例数据吗?甚至创建一个SqlFIDLE。我在运行SQL时添加了一个示例结果集,示例中只显示了6个部门,但还有更多,细节相同。@SelectDistinct请查看我的编辑,我还做了一个小小的修改,这样您就不需要使用两个聚合函数。您的第二个查询实际上不需要选择两次
Department
。可以在
pivot
中引用同一列两次,即(…)中部门的
计数(部门)
。(我想我在我的查询中做到了这一点,没有问题。)