Sql 使用字段在多个列标题中透视
我有以下使用PIVOT命令的基本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部分。显然,我希望避免手动
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
中引用同一列两次,即(…)中部门的计数(部门)
。(我想我在我的查询中做到了这一点,没有问题。)