1

私はこのテーブルを持っています:

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

運が悪い:(

4

4 に答える 4

3

次のようなことを試してみてください。

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
于 2013-08-23T15:36:35.710 に答える
0

ピボットも使えます

select * from per
pivot (count(job)  for job in ([xx],[yy],[zz]))
于 2013-08-23T15:44:13.010 に答える
0

人が固定されている場合は、これを試してください

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

SQL フィドルのデモ

人が異なる場合は、この動的クエリを試してください

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);
于 2013-08-24T06:24:12.750 に答える