加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:48:19 所属栏目:MsSql教程 来源:网络整理
导读:在SSIS中,有一个名为Pivot转换的任务将列更改为行, 但是如何使用t-sql在sql server中执行相同的任务? 这是我的样品表 location product qty-----------------------delhi PEPSI 100GURGAON CAKE 200NOIDA APPLE 150delhi cake 250 所以在转换ON位置作为setke
在SSIS中,有一个名为Pivot转换的任务将列更改为行,
但是如何使用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;

> 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读