在SSIS中,有一个名为Pivot转换的任务将列更改为行,
但是如何使用t-sql在sql server中执行相同的任务?
但是如何使用t-sql在sql 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;
注意:
>如果要使用总和使用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);