PIVOT by に可能なすべての値を知る必要があります。したがって、動的 SQL を使用しない限り、これを T-SQL で直接行うのは困難であり、これはすぐに複雑になります。おそらく、すべての行をプレゼンテーション層またはレポート作成者に渡して横向きにする方がよいでしょう。
すべての UBCategory 値が事前にわかっている場合の簡単な PIVOT の例を次に示します。結果の一部としてそのビューから来る列がない限り、かなり無関係に思えるので、ICCUDays を省略しました。
CREATE TABLE dbo.ICCUEnctrSelectedRevCatsDirCost( Account INT, UBCategory VARCHAR(10), DirectCost DECIMAL(9,2)); INSERT dbo.ICCUEnctrSelectedRevCatsDirCost SELECT 1, 'foo', 5.25 UNION SELECT 1, 'bar', 6.25 UNION SELECT 1, 'smudge', 8.50 UNION SELECT 2, 'foo', 9.25 UNION SELECT 2, 'brap', 2.75;SELECT Account,[foo],[bar],[smudge],[brap] FROM dbo.ICCUEnctrSelectedRevCatsDirCost -- WHEREこれをより動的にするには、DISTINCT UBCategory 値のコンマ区切りリストを取得し、その場でピボットを構築する必要があります。したがって、次のようになります:
CREATE TABLE dbo.ICCUEnctrSelectedRevCatsDirCost( Account INT, UBCategory VARCHAR(10), DirectCost DECIMAL(9,2)); INSERT dbo.ICCUEnctrSelectedRevCatsDirCost SELECT 1, 'foo', 5.25 UNION SELECT 1, 'bar', 6.25 UNION SELECT 1, 'smudge', 8.50 UNION SELECT 2, 'foo', 9.25 UNION SELECT 2, 'brap', 2.75 UNION SELECT 3, 'ビンゴ', 4.00;DECLARE @sql NVARCHAR(MAX), @col NVARCHAR(MAX);SELECT @col =COALESCE(@col, '') + QUOTENAME(UBCategory) + ',' FROM ( SELECT DISTINCT UBCategory FROM dbo.ICCUEnctrSelectedRevCatsDirCost ) AS x;SET @col =LEFT(@col, LEN(@col)-1);SET @sql =N'SELECT Account, $col$ FROM dbo.ICCUEnctrSelectedRevCatsDirCost -- WHERE次に、「データを新しいテーブルに送信する」には、クエリを単純な SELECT の代わりに INSERT INTO ... SELECT にするだけです。もちろん、これは役に立たないように思えます。挿入ステートメントを記述するには、列の順序を知る必要があり (このアプローチでは保証されません)、潜在的な各 UBCategory の列を既に配置している必要があるためです。とにかく価値があるので、これは非常に鶏と卵のようです.