sql 里面怎么把竖表变成横表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 里面怎么把竖表变成横表相关的知识,希望对你有一定的参考价值。

用SQL 如何转换?

SELECT 姓名
,'数学'=MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END)
,'语文'=MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END)
,'英语'=MAX(CASE 课程 WHEN '英语' THEN 分数 ELSE 0 END)
FROM TB
GROUP BY 姓名

--或者
SELECT 姓名,
,'数学'=SUM(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END)
,'语文'=SUM(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END)
,'英语'=SUM(CASE 课程 WHEN '英语' THEN 分数 ELSE 0 END)
FROM TB
GROUP BY 姓名
参考技术A select 姓名,sum(case when 科目='数学' then 分数 end) as 数学,sum(case when 科目='语文' then 分数 end) as 语文,sum(case when 科目='英语' then 分数 end) as 英语 from 表名
group by 姓名
参考技术B hdp134793的博客中有详细介绍,希望给到大家帮助

SQL纵表与横表互转

1.纵表转横表:

纵表结构:Table1

转换后的横表结构:

Sql示例代码:

select username,

sum(case Course when \'语文\' then Grade else 0 end) as 语文,

sum(case Course when \'数学\' then Grade else 0 end) as 数学,

sum(case Course when \'英语\' then Grade else 0 end) as 英语

from Table1

group by username

2、横表转纵表:

横表结构: TableA

ID

姓名

语文

数学

英语

1

张三

80

90

70

2

李四

90

85

95

3

王五

88

75

90

 

转换后的纵表结构:

ID

姓名

科目

成绩

1

张三

语文

80

2

张三

数学

90

3

张三

英语

70

4

李四

语文

90

5

李四

数学

80

6

李四

英语

99

7

王五

语文

85

8

王五

数学

96

9

王五

英语

88

SQL示例代码:

SELECT 姓名,\'语文\' AS 科目,语文 AS 成绩 FROM TableA UNION ALL

SELECT 姓名,\'数学\' AS 科目,数学 AS 成绩 FROM TableA UNION ALL

SELECT 姓名,\'英语\' AS 科目,英语 AS 成绩 FROM TableA ORDER BY 姓名,科目 DESC;

 

case 变量表达式 --对某个\'变量表达式\'进行判断

when 值 --当\'变量表达式\'是某个\'值\'时

then 返回值表达式 --返回\'返回值表达式\'值

[when...then........] --可以进行多次判断

[else 其他情况返回值表达式] --不符合所有when后面的就是其他情况了

end --结束

以上是关于sql 里面怎么把竖表变成横表的主要内容,如果未能解决你的问题,请参考以下文章

SQL 竖表变横表,自适应的,谁能帮看看。

sql竖表转横表

竖表转横表sql语句中的sum求出来的怎么是int类型

sql纵向数据变横向数据正负

SQL竖表转换成横表统计

oracle纵表转横表