【问题标题】:Groupby using PIVOTGroupby 使用 PIVOT
【发布时间】:2013-08-26 17:26:52
【问题描述】:

我有这张桌子:

Person  Job
PersonA XX
PersonA XX
PersonA XX
PersonB XX
PersonB XX
PersonB YY
PersonB ZZ
PersonC XX
PersonC XX
PersonA XX
PersonA YY
PersonB ZZ
...

现在,我希望输出是这样的:

Job PersonA PersonB Person C
XX  4       2       2
YY  1       1       0
ZZ  0       2       0

到目前为止,我有这个:

SELECT DISTINCT Person,
                       (SELECT COUNT(Job)
                        FROM dbo.TableName
                        GROUP BY Job)
FROM dbo.ExcelImport

不走运:(

【问题讨论】:

标签: sql sql-server-2008 pivot


【解决方案1】:

你应该尝试这样的事情:

select
    Job
    ,SUM(case when Person = 'PersonA'
        then
            1
        else
            0
    end) as 'PersonA'
    ,SUM(case when Person = 'PersonB'
        then
            1
        else
            0
    end) as 'PersonB'
    ,SUM(case when Person = 'PersonC'
        then
            1
        else
            0
    end) as 'PersonC'
from
    TableName
group by
    Job

【讨论】:

  • 太棒了!这就是我要找的:)
【解决方案2】:

pivot 操作员的任务很简单:

select *
from (select Job as Job2, * from [TableName]) t
    pivot (count(Job2) for Person in ([PersonA],[PersonB],[PersonC])) p

【讨论】:

    【解决方案3】:

    你也可以使用枢轴

    select * from per
    pivot (count(job)  for job in ([xx],[yy],[zz]))
    

    【讨论】:

      【解决方案4】:

      如果人是固定的,试试这个

      SELECT * FROM Table1
      PIVOT
      (
          COUNT([Person]) FOR [Person] IN ([PersonA],[PersonB],[PersonC])
      ) p
      

      SQL FIDDLE DEMO

      如果人不同,那么试试这个动态查询

      DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)
      SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME([Person]) 
                          from Table1
                  FOR XML PATH(''), TYPE
                  ).value('.', 'NVARCHAR(MAX)') 
              ,1,1,'')
      
      SET @query = 'SELECT [Job],' + @cols + ' 
                   FROM
                   (
                      Select *
                      FROM Table1
                   ) T
                   PIVOT
                   (
                      COUNT([Person])
                      FOR [Person] IN (' + @cols + ')
                   ) pvt '
      
      EXECUTE(@query);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-08
        • 1970-01-01
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        相关资源
        最近更新 更多