2017-09-20 5 views
1

多くのレベルの列を使用してSQL Serverでピボットを実行しようとしています。現在、私は変数を使用しているPIVOT

select '[' + category_1 + '],', count(*) from myTable group by '[' + category_1 + '],'

やコピーを行うと、テキストエディタに出力を貼り付けています。

変数を宣言して、それをpivotコマンドのIN ([],[],[])情報として使用できるかどうかは疑問でした。誰もそれを行うことができましたか?

私はそれがこのようなものに見えると思う:私が正しくあなたを理解していた場合

@factorLevels = (select '[' + category_1 + '],' from (select category_1, count(*) from myTable) t1) 

SELECT * 
FROM 
(select category_1, item_count from myTable) as t1 
PIVOT 
(
SUM(item_count) 
FOR category_1 IN (@factorLevels) 
) as PivotTable; 
+1

これはのように聞こえる[: あなたはピボットしたいことでフィールドのすべての値を含む変数を設定し、変数にクエリ自体を割り当て、結果を得るためにそれを実行する必要があります。動的ピボット](https://stackoverflow.com/a/40598475/6167855)。それはあなたが目指しているものでしょうか? [別の例](https://stackoverflow.com/a/39513013/6167855) – scsimon

+0

@scsimon:これは私が必要なもののようです - ありがとう! – screechOwl

+0

問題はありません@screechOwl – scsimon

答えて

1

を、私は解決策を持っていると思います。このために動的SQLを使用できます。

DECLARE 
    @values VARCHAR(50), 
    @querytext VARCHAR(MAX) 
; 
SET @values = (SELECT '('+(SELECT STUFF((SELECT ',[' + category_1 +']' FROM 
    <your table> FOR XML PATH('')), 1, 1, '') )+')') 
; 

SELECT @querytext = 
'SELECT * 
FROM (
    SELECT 
     <your fields> 
    FROM 
     <your table> 
    WHERE 
     <your criteria> 
    GROUP BY 
     <your grouping> 
    ) AS Main 
PIVOT (
    SUM(item_count) 
    FOR [category_1] IN ' + @values + ' 
    ) AS PivotSum' 

EXEC sp_executesql @querytext 
関連する問題