【问题标题】:PIVOT for in many column headers using field [duplicate]使用字段在许多列标题中进行 PIVOT [重复]
【发布时间】:2012-10-29 22:06:06
【问题描述】:

我有以下使用 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 部分。显然我想避免手动输入每个部门。

编辑

这是创建我在数据透视表中使用的数据集的 sql...

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

编辑 2

【问题讨论】:

    标签: sql sql-server sql-server-2008 pivot


    【解决方案1】:

    你会想用动态sql来PIVOT这个,你的代码会是这样的:

    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)
    

    如果您发布更多详细信息,例如表格结构等,则可以对其进行细化以满足您的需求。

    编辑,根据您当前的查询,看起来您可以使用以下内容:

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX),
        @colsNull AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(department) 
                        from myincidentdb
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT  Details, ' + @cols + ' 
                  from 
                  (
                    select Details, Department
                    from myincidentdb 
                  ) x
                  pivot 
                  (
                    count(Department)
                    for Department in (' + @cols + ')
                  ) p '
    
    execute(@query)
    

    SQL Fiddle with Demo

    【讨论】:

    • 添加了创建我的数据集的 sql 语句。
    • 你能发布一些示例数据吗?甚至创建一个 sqlfiddle。
    • 我在运行 SQL 时添加了一个示例结果集,示例中只显示了 6 个部门,但还有更多,与 Detail 相同。
    • @SelectDistinct 请看我的编辑,我也做了一些小改动,所以你不需要使用两个聚合函数。
    • 您的第二个查询实际上不需要选择Department 两次。在pivot 中引用同一列两次是可以的,即count(Department) for Department in (...)。 (我想我已经在我的查询中做到了,没有问题。)
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2023-01-02
    • 1970-01-01
    • 2020-03-26
    • 2020-04-26
    相关资源
    最近更新 更多