1

重複の可能性:
T-SQL のピボット データ

クエリに必要な変更を加えて、ピボット フォーム表示を作成してください ...

select COUNT(employeeid) as count_of_employees,Title 
from HumanResources.Employee 
group by Title order by no_of_employees desc

このクエリは次の結果を返します

count_of_employees  Title
26                  Production Technician - WC50
26                  Production Technician - WC60
26                  Production Technician - WC40
25                  Production Technician - WC30
22                  Production Technician - WC20
17                  Production Technician - WC10
15                  Production Technician - WC45
14                  Sales Representative
9                   Buyer
5                   Marketing Specialist
4                   Scheduling Assistant

望ましい結果が必要です

Production Technician-WC50 |  Production Technician-WC60  |   Production Technician-WC40
           26              |            26                |                26
4

1 に答える 1

3

説明した方法で行を列にピボットするには、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;

SQLフィドルデモ


しかし、これらのタイトルのリストを書かなければならないので、これは醜いです。ただし、次のように動的にタイトルのリストを取得することにより、これを動的に行うことをお勧めします。

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);

SQLフィドルデモ

これはあなたに与えるはずです:

| 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
于 2012-12-10T08:42:09.903 に答える