9

SSIS一个称为 Pivot 转换的任务,它将列更改为行,但是如何使用 t-sql 在 sql server 中执行相同的任务?

这是我的示例表

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 回答
8
于 2013-10-08T12:05:53.403 回答