説明した方法で行を列にピボットするには、PIVOT
テーブル演算子を使用する必要があります。そのようなもの:
SELECT *
FROM
(
SELECT [count_of_employees], [Title]
FROM YourQuery
) t
PIVOT
(
MAX(count_of_employees)
FOR Title IN([Production Technician - WC50],
[Production Technician - WC60],
[Production Technician - WC40],
[Production Technician - WC30],
[Production Technician - WC20],
[Production Technician - WC10],
[Production Technician - WC45],
[Sales Representative],
[Buyer],
[Marketing Specialist],
[Scheduling Assistant])
) p;
しかし、これらのタイトルのリストを書かなければならないので、これは醜いです。ただし、次のように動的にタイトルのリストを取得することにより、これを動的に行うことをお勧めします。
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME (title)
FROM YourQuery
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)') ,1,1,'');
SET @query = 'SELECT ' + @cols + ' FROM
(
SELECT [count_of_employees], [Title] FROM YourQuery
) t
PIVOT
(
MAX(count_of_employees)
FOR title IN (' + @cols + ')
) p ';
EXECUTE(@query);
これはあなたに与えるはずです:
| BUYER | MARKETING SPECIALIST | PRODUCTION TECHNICIAN - WC10 | PRODUCTION TECHNICIAN - WC20 | PRODUCTION TECHNICIAN - WC30 | PRODUCTION TECHNICIAN - WC40 | PRODUCTION TECHNICIAN - WC45 | PRODUCTION TECHNICIAN - WC50 | PRODUCTION TECHNICIAN - WC60 | SALES REPRESENTATIVE | SCHEDULING ASSISTANT |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 9 | 5 | 17 | 22 | 25 | 26 | 15 | 26 | 26 | 14 | 4 |
これはより良いですが、動的SQLに注意する必要があるかもしれません。詳細については、これをリードしてください。
注:ここでの回答で使用したテーブルYourQuery
は、クエリに置き換える必要があります。
select COUNT(employeeid) as count_of_employees,Title
from HumanResources.Employee
group by Title order by no_of_employees desc