使用t-sql进行数据透视[封闭]

前端之家收集整理的这篇文章主要介绍了使用t-sql进行数据透视[封闭]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在SSIS中,有一个名为Pivot转换的任务将列更改为行,
但是如何使用t-sqlsql server中执行相同的任务?

这是我的样品表

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

所以在转换ON位置作为setkey和产品作为枢轴键使用ssis工具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;

> SQL Fiddle Demo

注意:

>如果要使用总和使用SUM或任何其他聚合函数,我用了qty的MAX聚合函数.
>您必须将列的值编写为手动转换,如果要动态执行此操作,而不是手动编写它们,则必须使用动态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,'');

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

execute(@query);

> Updated SQL Fiddle Demo

猜你在找的MsSQL相关文章