同様の質問があります
演算子
---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'
EXECUTE(@query)
説明
1.クエリの最初の部分
SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'
次のように、名前列の値を1行にまとめた結果がフラットになります
。[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]
STUFFとXMLPATHの詳細については、こちら> および
2. SELECT + @cols + FROM
最終結果セットの列名としてすべての行を選択します(pvt-ステップ3)
つまり
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt]
3.このクエリは、クロス集計結果を作成するために必要なデータのすべての行をプルします。クエリ後の(p)は、結果の一時テーブルを作成します。このテーブルを使用して、ステップ1のクエリを満たすことができます。
(SELECT t1.Name, t1.Count FROM TESTTABLE AS t1) p
4.PIVOT式
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt
実際の要約を実行し、結果をpvtと呼ばれる一時テーブルに
として配置します。Chery | Drew | Morgon | Kath | Kirk | Matt
-------------------------------------------
257 1500 13 500 200 76