码迷,mamicode.com
首页 > 数据库 > 详细

SQL 行转列 列转行 PIVOT UNPIVOT

时间:2017-09-27 10:09:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:nio   技术   weight   插入   strong   --   es2017   ges   unp   

1.基础表

技术分享

2.行转列,注意ISNULL函数的使用,在总成绩的统计中,ISNULL(-,0) 有必要使用

技术分享

技术分享

3.列转行,对列语文、数学、英语、政治,进行列转行,转为了2列,score scname 这两列,是新列,可以取名为 score11 scname22,随意

技术分享

技术分享

4.测试脚本

SELECT * FROM dbo.SC

--插入测试数据
INSERT dbo.SC        
SELECT NEWID(),001,jack1,数学,88
UNION
SELECT NEWID(),002,jack2,语文,55
UNION
SELECT NEWID(),003,jack3,英语,66
UNION
SELECT NEWID(),004,jack4,政治,77
--行转列
SELECT * FROM dbo.SC
PIVOT (SUM(Score) FOR SCName IN(语文,数学,英语,政治)) AS p

--列转行
SELECT * FROM (
    --这里是行转列
    SELECT sno,sname,ISNULL(语文,0) AS 语文,ISNULL(数学,0) AS 数学,ISNULL(英语,0) AS 英语,ISNULL(政治,0) AS 政治 FROM dbo.SC
    PIVOT (SUM(Score) FOR SCName IN(语文,数学,英语,政治)) AS p
) t
UNPIVOT (score FOR SCName IN(语文,数学,英语,政治)) AS up
WHERE score !=0

SELECT * FROM (
    --这里是行转列
    SELECT sno,sname,ISNULL(语文,0) AS 语文,ISNULL(数学,0) AS 数学,ISNULL(英语,0) AS 英语,ISNULL(政治,0) AS 政治 FROM dbo.SC
    PIVOT (SUM(Score) FOR SCName IN(语文,数学,英语,政治)) AS p
) t
UNPIVOT (Score11 FOR SCName22 IN(语文,数学,英语,政治)) AS up
WHERE Score11 !=0

 

SQL 行转列 列转行 PIVOT UNPIVOT

标签:nio   技术   weight   插入   strong   --   es2017   ges   unp   

原文地址:http://www.cnblogs.com/ligenyun/p/7599929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!