开发者社区> 墨云天> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQL 列转行、行转列

简介:
+关注继续查看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
一、行转列
 
create TAble TA (NAME    varchar(10) ,SUBJECT varchar(10) ,RESULT  int)
  
insert into TA(NAME , SUBJECT , RESULT) values('张三' '语文' , 74)
insert into TA(NAME , SUBJECT , RESULT) values('张三' '数学' , 83)
insert into TA(NAME , SUBJECT , RESULT) values('张三' '物理' , 93)
insert into TA(NAME , SUBJECT , RESULT) values('李四' '语文' , 74)
insert into TA(NAME , SUBJECT , RESULT) values('李四' '数学' , 84)
insert into TA(NAME , SUBJECT , RESULT) values('李四' '物理' , 94)
go
  
select from TA
 
--方法一:使用case when end结构
select NAME 姓名,
  max(case SUBJECT when '语文' then RESULT else end) 语文,
  max(case SUBJECT when '数学' then RESULT else end) 数学,
  max(case SUBJECT when '物理' then RESULT else end) 物理
from TA
group by NAME
 
--方法二:PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
select from TA pivot(max(RESULT) for SUBJECT in (语文,数学,物理))a



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
二、列转行
 
CREATE TABLE TB (NAME VARCHAR(20), 语文 INT, 数学 INT, 物理 INT)
 
INSERT INTO TB VALUES('张三', 88,99,89);
INSERT INTO TB VALUES('李四', 78,77,87);
GO
 
SELECT FROM TB
 
--方法一:
select from 
(select NAME,'语文' AS 科目,语文 as 分数 from TB 
 union all
 select NAME,'数学' AS 科目,数学 as 分数 from TB 
 union all
 select NAME,'物理' AS 科目,物理 as 分数 from TB
AS t
 
--方法二:使用unpivot函数
SELECT NAME,科目,分数 FROM TB UNPIVOT(分数 for 科目 in (语文,数学,物理))b

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL中行转列、列转行
SQL中行转列、列转行
92 0
SQL中的行转列和列转行
SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。
175 0
sql 行转列 PIVOT 列转行 UNPIVOT
原文: sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式。 表一: 年 公司 收入 2013 公司1 12...
1115 0
[转载]SQL行转列,列转行
原文地址:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html  行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。
1220 0
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
833 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1484 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
用SQL做数据分析
立即下载
GeoMesa on Spark SQL
立即下载
时序数据库TSDB新功能 - 如何用SQL进行时序查询
立即下载