加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL中行转列和列转行

发布时间:2016-01-12 10:35:07 所属栏目:MsSql教程 来源:网络整理
导读:行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法
行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT...CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。

我们首先先通过一个老生常谈的例子,学生成绩表(下面简化了些)来形象了解下行转列

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
查询结果如图所示,这样我们就能很清楚的了解每位学生所有的成绩了

SQL中行转列和列转行

(编辑:云计算网_泰州站长网)

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

    推荐文章
      热点阅读