sql >> データベース >  >> RDS >> Sqlserver

2 つのビューを結合する SQL Server 2005 ストアド プロシージャで PIVOT を使用する方法

    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 , ???PIVOT( MAX(DirectCost) FOR UBCategory IN ([foo],[bar] ,[smudge],[brap])) AS p;GODROP TABLE dbo.ICCUEnctrSelectedRevCatsDirCost;

    これをより動的にするには、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 だと思います???PIVOT( MAX(DirectCost) FOR UBCategory IN ($col$)) AS p;';SET @sql =REPLACE(@sql, '$col$', @col);--EXEC sp_executeSQL @sql;PRINT @sql;GODROP TABLE dbo.ICCUEnctrSelectedRevCatsDirコスト;

    次に、「データを新しいテーブルに送信する」には、クエリを単純な SELECT の代わりに INSERT INTO ... SELECT にするだけです。もちろん、これは役に立たないように思えます。挿入ステートメントを記述するには、列の順序を知る必要があり (このアプローチでは保証されません)、潜在的な各 UBCategory の列を既に配置している必要があるためです。とにかく価値があるので、これは非常に鶏と卵のようです.




    1. IN演算子を使用してjsonb配列をクエリする方法

    2. テーブル行を挿入する SQL クエリが正しく機能しないのはなぜですか?

    3. Microsoft ODBC Driver 13 for SQL Server :ユーザー 'sa' のログインに失敗しました

    4. 何百万ものレコードから重複行を効果的に削除する方法