9

列を行に変更するピボット変換と呼ばれるタスクがありますが、SSISt-sql を使用して SQL サーバーで同じタスクを実行するにはどうすればよいですか?

これは私のサンプルテーブルです

location product qty
-----------------------
delhi     PEPSI   100
GURGAON   CAKE    200
NOIDA     APPLE   150
delhi     cake    250

そのため、ssis ツールを使用して setkey としてのピボット変換オンの場所とピボット キーとしての製品の後、o/p は次のようになります。

location pepsi cake apple
delhi     100 null null
GURGAON   null 200 null 
NOIDA     null null 150 
delhi     null 250  null
4

2 に答える 2

9

次のように表演算子を使用しPIVOTます。

SELECT *
FROM tablename
PIVOT
(
  MAX(qty)
  FOR product IN([pepsi], [cake], [apple])
) as p;

ご了承ください:

  • 代わりに、総計の使用またはその他の集計関数を取得する場合は、MAX集計関数を で使用しました。qtySUM

  • 列の値を手動でピボットするように書き込む必要があります。手動で書き込むのではなく動的にこれを行う場合は、動的 sql を使用して行う必要があります。

このような:

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(product)
                      FROM tablename
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');

SELECT @query = 'SELECT *
FROM tablename
PIVOT
(
  MAX(qty)
  FOR product IN(' + @cols + ')) AS p;';

execute(@query);
于 2013-10-08T09:42:32.577 に答える