SQL面试题之行转列】的更多相关文章

典型的课程表: mysql> select * from course; +----+------------+----------+------------+ | id | teacher_id | week_day | has_course | +----+------------+----------+------------+ | Yes | | Yes | | Yes | | Yes | | Yes | +----+------------+----------+-----------…
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 Chinese int, Math int, English int ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student --查询所有数据 ,,); ,,); ,,); ,,); 一:列转行,下面是转换之前与之后的截图对比 如果想要行转列,参考…
表结构和数据如下(表名Test): NO VALUE NAME 1 a 测试1 1 b 测试2 1 c 测试3 1 d 测试4 2 e 测试5 4 f 测试6 4 g 测试7 Sql语句: select No, ltrim(max(sys_connect_by_path(Value, ';')), ';') as Value, ltrim(max(sys_connect_by_path(Name, ';')), ';') as Name from (select No, Value, Name,…
在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 StuSubject ),--考试科目 StuScore int --考试成绩 ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student --查询所有数据 /* 第二步:写入测试数…
[pivot]行转列:多行变一列 假设学生成绩表Score1 Name Subject Score 小张 语文 88 小花 数学 89 小张 数学 90 Name 语文 数学 小花 null 89 小张 88 90 --一定要有聚合函数, 如sum(Score) select * from Score1 pivot (sum(Score) for Subject in (语文,数学)) b [unpivot]列转行:一列变多行 假设学生成绩表Score2 Name Chinese Math 小花…
---恢复内容开始--- [ 今天下午接受了一个紧急小任务,是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行转列,但是一开始就觉得不对,后来写到一半确实不对,后来上网查询了半天多行多列转一行多列,发现又要写算法又要写函数,看了实在头疼,不想这么麻烦.于是自己突然间灵机一动,闪过一个小想法,立马实施,就是将所有记录前面都加上一个标识列num(row_number()函数),然后用case 判断奇偶行在显示,就行了. select row_number…
开篇介绍 记得笔者在 2006年左右刚开始学习 SQL Server 2000 的时候,遇到一个面试题就是行转列,列转行的操作,当时写了很长时间的 SQL 语句最终还是以失败而告终.后来即使能写出来,也是磕磕碰碰的,虽然很能锻炼 SQL 功底,每次都要挣扎一番,溺水的感觉.记得SQL Server 2005 以后就有了 PIVOT 和 UNPIVOT 这两个函数,可以非常方便的实现行转列和列传行的操作,就不再那么挣扎了.后来,在一个 08 项目中,有一位新的女同事在改一个 ETL,发现 SSIS…
本帖子是行转列的一个逆向操作——列转行,看下面一个面试题 面试题2: 柠檬班第30期学生要毕业了,他们的Linux.MySQL.Java成绩数据表 tb_lemon_grade_column中, 表中字段student_name,Linux,MySQL,Java分别表示学生姓名.Linux成绩.MySQL成绩.Java成绩, 数据图1所示.请写出一条SQL,将图1的数据变成图2的形式(列转行)如下图示: 1:使用上节课学的知识,获得以列的形式展示的成绩数据(行转列) SELECT student…
今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID.请用SQL语句实现将上表中的数据合并,合并后的数据为:p_ID s1_id s2_id s3_id1 10 12 02 8 0 03 11 0 8其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量.如果该产品在某仓库中无库存量,那么就是0代…
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL,动态列字段: 方法三:使用PIVOT关系运算符,静态列字段: 方法四:使用PIVOT关系运算符,动态列字段: 扩展阅读一:参数化表名.分组列.行转列字段.字段值: 扩展阅读二:在前面的基础上加入条件过滤: 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的…