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 --结束

原文地址:https://www.cnblogs.com/Chary/p/8818176.html

时间: 2024-10-09 14:56:20

SQL纵表与横表互转的相关文章

SQL Server之纵表与横表互转

1,纵表转横表 纵表结构 Table_A: 转换后的结构: 纵表转横表的SQL示例: SELECT  Name ,        SUM(CASE WHEN Course = N'语文' THEN Grade                 ELSE 0            END) AS Chinese ,        SUM(CASE WHEN Course = N'数学' THEN Grade                 ELSE 0            END) AS Math

纵表与横表互转实例(转)

1.纵表转横表: 纵表结构:Table1 转换后的横表结构: Sql示例代码: 1 2 3 4 5 6 7 8 9 10 11 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 英语 fr

sql 语句纵表变横表

现把转换方法列举如下: 1.纵表转横表: 纵表结构 TableA Name Course Grade 张三 语文 75 张三 数学 80 张三 英语 90 李四 语文 95 李四 数学 55 横表结构 TableB Name 语文 数学 英语 张三 75 80 90 李四 95 55 0 方法一: select Name, sum(case Course when ‘语文‘ then Grade else 0 end) as 语文, sum(case Course when ‘数学‘ then

纵表与横表互转实例

1.纵表转横表: 纵表结构:Table1 转换后的横表结构: Sql示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 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 英语

sql_纵表变横表

method certificate value     getUserId 123 getUserid     startTime 123 22     endTime 123 33               如表所示,现在有一个需求,要算getUserId的执行时间,给一个思路,先查询出method=getUserID,和certificate,作为一个结果集,再查出来method=startTime的结果集,然后重新 select from这三个结果集r1,r2,r3, where R1

数据库之横表转纵表、纵表转横表

/*横表变纵表或纵表变横表 成绩表如下 Name Course Grade 张三 语文 95 张三 数学 90 张三 英语 89 李四 语文 92 李四 数学 88 李四 英语 97变成 姓名 语文 数学 英语 张三 95 90 89 李四 92 88 97 */ --纵表转横表 create table biao ( PName varchar(10), PCourse varchar (10), PGrade int ) go insert into biao values('张三','语文

sql实现纵表变横表

网上所有的纵横表转换都是千篇一律的,参考价值都不大,而且只适合那种数据量固定的学生成绩表的横纵转化,但是当真正遇到大数据量的批量转换的时候是行不通的,下面介绍一种相对灵活的大量数据的横纵表转换: 表结构: 如上图所示,其中index_id中以0结尾的表示的是服务名,以1结尾的表示设备rac名称,2结尾的表示的是设备状态. 下面我们需要将一组0,1,2结尾的分别展示成以服务名,设备rac名称,设备状态为表头的一行数据,多组0,1,2结尾的展示成多行数据. Sql执行如下: select index

Hadoop MapReduce纵表转横表

输入数据如下:以\t分隔 0-3岁育儿百科 书 23 0-5v液位传感器 5 0-5轴承 2 0-6个月奶粉 23 0-6个月奶粉c2c报告 23 0-6个月奶粉在线购物排名 23 0-6个月奶粉市场前景 23 0-6个月配方奶粉 23 0.001g电子天平 5 0.01t化铝炉 2 0.01吨熔铝合金炉 2 0.03吨化镁炉 25 0.03吨电磁炉 11 其中左侧是搜索词,右侧是类别,可看成是数据库中的纵表,现需要将输入转成横表,即 类名\t语句1\t语句2...,这样的格式. MapRedu

纵表转横表(SQL)

/* 普通行列转换 (爱新觉罗.毓华 2007-11-18于海南三亚) 假设有张学生成绩表(tb)如下: Name  Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 */ ------------------------------------------------------------------------- /* 想变成  姓名         语文        数学        物理