在 SSIS
有一个称为透视转换的任务,可以将列更改为行,
但是如何使用 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
最佳答案
使用PIVOT
表运算符如下:
SELECT *
FROM tablename
PIVOT
(
MAX(qty)
FOR product IN([pepsi], [cake], [apple])
) as p;
请注意:
我使用了
MAX
聚合函数和qty
,如果您想获得总和,请使用SUM
或任何其他函数而是聚合函数。您必须手动写入要旋转的列的值,如果您想动态执行此操作而不是手动写入它们,则必须使用动态 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);
关于sql - 使用 t-sql 进行透视转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19243821/