前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL中PIVOT和UNPIVOT行列转换

SQL中PIVOT和UNPIVOT行列转换

作者头像
用户1112962
发布2018-07-04 13:29:07
1.3K0
发布2018-07-04 13:29:07
举报
文章被收录于专栏:互联网开发者交流社区
代码语言:javascript
复制
DECLARE @sql_col VARCHAR(8000);
DECLARE @sql_str VARCHAR(8000);
DECLARE @sql_ VARCHAR(MAX);
SELECT  @sql_col = ISNULL(@sql_col + ',', '')
        + QUOTENAME(BBCAccount.dbo.BusinessType.Name)
FROM    BBCAccount.dbo.BusinessType
WHERE   ParentCode IS NULL
        AND Type = 0
        AND IsSystem = 1;
SET @sql_ = 'select *
from(
		select Code,Name  from BBCAccount.dbo.BusinessType WHERE ParentCode IS NULL AND Type=0 AND IsSystem=1
	)as tw
pivot( max(Code) for Name in(' + @sql_col + ') )piv ';
EXEC(@sql_);

明显,UN这个前缀表明了,它做的操作是跟PIVOT相反的,即列转行。UNPIVOT操作涉及到以下三个逻辑处理阶段。
 
1,生成副本
2,提取元素
3,删除带有NULL的行

UNPIVOT实例


CREATE TABLE pvt
    (
      VendorID INT ,
      Emp1 INT ,
      Emp2 INT ,
      Emp3 INT ,
      Emp4 INT ,
      Emp5 INT
    );
GO
INSERT  INTO pvt
VALUES  ( 1, 4, 3, 5, 4, 4 );
INSERT  INTO pvt
VALUES  ( 2, 4, 1, 5, 5, 5 );
INSERT  INTO pvt
VALUES  ( 3, 4, 3, 5, 4, 4 );
INSERT  INTO pvt
VALUES  ( 4, 4, 2, 5, 5, 4 );
INSERT  INTO pvt
VALUES  ( 5, 5, 1, 5, 5, 5 );
GO
--Unpivot the table.
SELECT  VendorID ,
        Employee ,
        Orders
FROM    ( SELECT    VendorID ,
                    Emp1 ,
                    Emp2 ,
                    Emp3 ,
                    Emp4 ,
                    Emp5
          FROM      pvt
        ) p UNPIVOT
   ( Orders FOR Employee IN ( Emp1, Emp2, Emp3, Emp4, Emp5 ) )AS unpvt;
GO
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档