以前有写过行转列,列转行的博客 具体见:
https://blog.csdn.net/weixin_38653290/article/details/84639754
今天分享下使用case when,union all实现sql行转列、列转行

--  建表
CREATE  TABLE StudentScores
(UserName         NVARCHAR(20),        -- 学生姓名Subject          NVARCHAR(30),        -- 科目Score            FLOAT               -- 成绩
)

-- 添加数据
INSERT INTO StudentScores SELECT '张三', '语文', 80 ;
INSERT INTO StudentScores SELECT '张三', '数学', 90 ;
INSERT INTO StudentScores SELECT '张三', '英语', 70 ;
INSERT INTO StudentScores SELECT '张三', '生物', 85 ;
INSERT INTO StudentScores SELECT '李四', '语文', 80 ;
INSERT INTO StudentScores SELECT '李四', '数学', 92 ;
INSERT INTO StudentScores SELECT '李四', '英语', 76 ;
INSERT INTO StudentScores SELECT '李四', '生物', 88 ;
INSERT INTO StudentScores SELECT '码农', '语文', 60 ;
INSERT INTO StudentScores SELECT '码农', '数学', 82 ;
INSERT INTO StudentScores SELECT '码农', '英语', 96 ;
INSERT INTO StudentScores SELECT '码农', '生物', 78 ;
-- 使用PIVOT行转列
SELECT * FROM StudentScores
AS P
PIVOT
(SUM(Score) FOR p.Subject IN ('语文','数学','英语','生物')
) AS T--  使用case when行转列
select UserName,max(case when subject='语文' then score else 0 end) 语文,max(case when subject='数学' then score else 0 end) 数学,max(case when subject='英语' then score else 0 end) 英语,max(case when subject='生物' then score else 0 end) 生物
from StudentScores
group by UserName

-- 建表
drop table if exists StudentScores2;
CREATE  TABLE StudentScores2
(UserName         NVARCHAR(20),        -- 学生姓名语文             FLOAT,        -- 科目数学             FLOAT,        -- 科目英语             FLOAT,        -- 科目生物             FLOAT        -- 科目
);-- 添加数据
insert into StudentScores2select UserName,max(case when subject='语文' then score else 0 end) 语文,max(case when subject='数学' then score else 0 end) 数学,max(case when subject='英语' then score else 0 end) 英语,max(case when subject='生物' then score else 0 end) 生物
from StudentScores
group by UserName;

-- 使用union all 列转行select UserName,'语文' subject,语文 score
from StudentScores2
union all
select UserName,'数学' subject,数学 score
from StudentScores2
union all
select UserName,'英语' subject,英语 score
from StudentScores2
union all
select UserName,'生物' subject,生物 score
from StudentScores2;

使用case when,union all实现sql行转列、列转行相关推荐

  1. sql行并列,列分行

    将一个字段","分割的数据进行多列展示: SELECT REGEXP_SUBSTR (T.TEXTBOOK_IDS,'[^,]+',1,LEVEL) TEXTBOOK_ID FRO ...

  2. 多列转多行sql oracle,sql多行转多列,中文没办法聚集的有关问题

    sql多行转多列,中文没办法聚集的问题? 我要将下表 选项      答案       姓名 爱好      篮球       bruce 年龄      28        bruce 性别     ...

  3. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name ,value = ( STUFF(( SELECT ',' + val ...

  4. Sql 行转列问题总结

    1.行转列---1.最简单的行转列 /* 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 ...

  5. SQL 行转列 列转行 Oracle转置函数函数pivot、unpivot 解决wm_concat 没有排序

    https://www.cnblogs.com/mellowsmile/p/4642306.html HH 终风且暴,顾我则笑,谑浪笑敖,中心是悼. 终风且霾,惠然肯来,莫往莫来,悠悠我思. 博客园 ...

  6. SQL行转列,列转行

    我们都知道在sql查询中,union 是增行,join是增列,但是如果碰到需要行转列,列转行时,一味的使用 join来完成则会变的异常繁杂.如把一天24小时的行转换成列,则需要join24次,既不方便 ...

  7. SQL——行转列,列转行

    重温SQL--行转列,列转行 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现. ...

  8. 死磕:SQL行转列汇总(全网最全最详细)

    SQL行转列汇总 阅读目录 一. 基础语法: 二. 典型实例 一. 基础语法: PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PI ...

  9. SQL行转列、列转行

    SQL行转列.列转行 这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况.列转行问题同样也很常见. 一.整理测试数据 create table wyc ...

最新文章

  1. linux 进程等待 wait 、 waitpid
  2. sqlite.interop.dll 请确保此文件可以访问_不用数据线,一秒让电脑和iphone快速传文件...
  3. access 更新整列数据_在access中同一列的多个数据一次更新
  4. 第一章 Spring基础
  5. 解决http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
  6. 疑似华为Mate 30系列通过3C认证:标配40W快充
  7. 吴恩达深度学习笔记 course 2 1.1~1.14 深度学习的实用层面
  8. 结合Django+celery二次开发定时周期任务
  9. Flex(AS) JS抓取HTML页面元素数据
  10. 吃饭的时候吃饭,睡觉的时候睡觉。 (转)
  11. Android应用程序中的DVM和Linux中进程的区别
  12. 一文看懂信用额度管理体系(三连)
  13. android 个人云存储,个人云储存appv1.3
  14. Google 搜素技巧
  15. Photoshop Scripting 高阶编程(1):取色器的应用
  16. 疯狂的石头经典台词和镜头大全
  17. nVisual通信网络资源管理
  18. 用ffmpeg在Windows11下的命令行模式推流到B站直播间
  19. 进阶大数据架构师学习路线
  20. Jupyter添加目录

热门文章

  1. 【获奖榜单公布】遇见27岁的Java,分享你的开发者故事
  2. 小白初写Spring核心容器功能
  3. 声乐导师:荣永嘉(青年男高音,清畅声乐创始人)
  4. 软件测试的简历里面,项目介绍要怎么写好?【乐搏TestPro】
  5. 汇千网-未来PC长这样?微软正式推出第一台云电脑
  6. Python||datetime.timedelta()详解,核心是minutes与minute
  7. 报错解决Error parsing Mapper XML
  8. 从工程预算到项目管理,『蓝凌低代码』让房企管理更简单
  9. dexie.js 中文教程
  10. 什么是“ parentalcontrolsd”,为什么它在我的Mac上运行?