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

【SQL语句】两种方式行转列,内含pivot函数

时间:2020-09-18 02:33:39      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:else   shu   inf   需要   create   列转行   float   bsp   sele   

先建一个新表:

CREATE  TABLE [StudentScores]
(
   [UserName]         NVARCHAR(20),        --学生姓名
    [Subject]          NVARCHAR(30),        --科目
    [Score]            FLOAT,               --成绩
)
 
INSERT INTO [StudentScores] SELECT ‘Nick‘, ‘语文‘, 80
 
INSERT INTO [StudentScores] SELECT ‘Nick‘, ‘数学‘, 90
 
INSERT INTO [StudentScores] SELECT ‘Nick‘, ‘英语‘, 70
 
INSERT INTO [StudentScores] SELECT ‘Nick‘, ‘生物‘, 85
 
INSERT INTO [StudentScores] SELECT ‘Kent‘, ‘语文‘, 80
 
INSERT INTO [StudentScores] SELECT ‘Kent‘, ‘数学‘, 90
 
INSERT INTO [StudentScores] SELECT ‘Kent‘, ‘英语‘, 70
 
INSERT INTO [StudentScores] SELECT ‘Kent‘, ‘生物‘, 85

第一种方法:

SELECT 
      UserName, 
      MAX(CASE Subject WHEN ‘语文‘ THEN Score ELSE 0 END) AS ‘语文‘,
      MAX(CASE Subject WHEN ‘数学‘ THEN Score ELSE 0 END) AS ‘数学‘,
      MAX(CASE Subject WHEN ‘英语‘ THEN Score ELSE 0 END) AS ‘英语‘,
      MAX(CASE Subject WHEN ‘生物‘ THEN Score ELSE 0 END) AS ‘生物‘
FROM dbo.[StudentScores]
GROUP BY UserName
 技术图片

第二种方法:

SELECT * FROM StudentScores--第一步
pivot 
(
sum(Score) ----第三步 
for Subject in (语文,数学,英语,生物))---第二步 
as  成绩


第一步:从数据源查询数据
第二步:行转列的列名,将哪一列的数据转为列名
第三步:新的列名需要显示的值
技术图片

 

跟第一种方法结果一致。 

方法参考以下链接:

https://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html

https://www.jianshu.com/p/8f929264995e

【SQL语句】两种方式行转列,内含pivot函数

标签:else   shu   inf   需要   create   列转行   float   bsp   sele   

原文地址:https://www.cnblogs.com/wwHww/p/13677210.html

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