sql 生成一列1到10的数字_SQL 打印矩阵(三)
本文是“打印矩阵”系列的第三篇文章。
我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵。
规则:
- 使用 1~25 的数字依序填充矩阵;
- 从第一行第一列开始填充,沿着列的方向进行。如果是奇数列,从上往下填;如果是偶数列,则从下往上填;
- 第一列填满就到第二列,再到第三列,直到把矩阵都填满。
这个需求比前两篇的复杂度高,主要在于我们没法一下子看出每行数据出现的规律。
没思路?没关系,继续往下看就是了。
第一步,生成 1~25 的数(不管怎么样,这一步总是要做的)。
WITH recursive t_seq (num) AS
(SELECT 1 AS num
UNION ALL
SELECT num + 1 AS num
FROMt_seq
WHERE num < 25)SELECT * FROM t_seq
第二步,计算出每个数对应的列号。
从表上就可以看出,每个数字除于 5,再对结果向上取整就是该数字所在的列。
x0 AS
(SELECT num,CEIL(num / 5) AS col_no
FROMt_seq)SELECT * FROM X0
第三步,对偶数列做降序排序。
到现在我们仍旧没有找到每一行数字出现的规律。不过,我们可以试着把每列中的数字按照我们看到的顺序排好序。
比如,第一列是“1,2,3,4,5”,第二列是“10,9,8,7,6”,第三列是“11,12,13,14,15”。
x1 AS
(SELECT *,IF(col_no % 2 = 0, - 1 * num, num) AS ordered,row_number () over () AS seq
FROMx0
ORDER BY col_no,ordered)SELECT * FROM X1
上面的 SQL 执行的结果(部分) >>>
num col_no ordered seq
------ ------ ------- --------1 1 1 12 1 2 23 1 3 34 1 4 45 1 5 510 2 -10 69 2 -9 78 2 -8 87 2 -7 96 2 -6 10
在这个结果里面,我们发现了数字字段 num 和序号字段 seq 之间存在某种联系:seq % 5
得到的结果一致的 num 处在同一行上。
第四步,行转列。
既然已找到了分组的依据,剩下要做的就是行转列。
x2 AS
(SELECT (seq % 5) AS row_no,MAX(IF(col_no = 1, num, NULL)) AS A,MAX(IF(col_no = 2, num, NULL)) AS B,MAX(IF(col_no = 3, num, NULL)) AS C,MAX(IF(col_no = 4, num, NULL)) AS D,MAX(IF(col_no = 5, num, NULL)) AS E
FROMx1
GROUP BY (seq % 5)) SELECT A ,B ,C ,D ,E
FROMx2
ORDER BY 1
最终输出结果 >>>
A B C D E
------ ------ ------ ------ --------1 10 11 20 212 9 12 19 223 8 13 18 234 7 14 17 245 6 15 16 25
sql 生成一列1到10的数字_SQL 打印矩阵(三)相关推荐
- sql max同一行_SQL 打印矩阵(三)
本文是"打印矩阵"系列的第三篇文章. 我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵. 规则: 使用 1~25 的数字依序填充矩阵: 从第一行第一列开始填充,沿着列的方向 ...
- 单元格内多个姓名拆分成一列_把订单按货品拆分成多行
办公的小伙伴们,今天小编来和大家分享:如何将一个单元格中有多行数据拆分成多行. 看下图:要把订单按货品拆分成多行明细. 下面给出几种不同的方法. 方法一:借word来拆分内容 Step1:把表格复制到 ...
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name ,value = ( STUFF(( SELECT ',' + val ...
- 如何将SQL查询出的两列合并成一列显示,并用逗号隔开
如何将SQL查询出的两列合并成一列显示,并用逗号隔开 先给出一个表 DROP TABLE IF EXISTS `apps`; CREATE TABLE `apps` (`id` int NOT NUL ...
- SQL SERVER 如何把1列多行数据 合并成一列显示
示例 修改前:1列多行数据 修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别, 名称 = ( stuff( ...
- SQL——将两列合并成一列
将两列合并连接成一列,需要注意的是列的格式必须是NVARCHAR或者VARCHAR类型 1 SELECT ','+Convert(NVARCHAR(30), call_uuid, 0 ) +','+a ...
- oracle 将多列数据合并成一列显示
将多列数据合并成一列数据显示 方法一:执行update语句,之后select 出来,这个不是本次的重点 方法二:不执行update语句,直接select出来的时候就显示了,但是不改变表结构和数据 (A ...
- java怎么写合并列sql_SQL STUFF函数 拼接字符串 多列 合并成一列 转
关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbv ...
- as cast float server sql_面试常考!SQL行转列和列转行
来源:CSDN 作者:潇湘隐者 原文地址:www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 大家好,我是小五 今天和大家分享的内容是关 ...
最新文章
- IM4Java + GraphicsMagick 实现高清图片剪裁处理
- jde多目标_华科开源多目标跟踪(MOT)实时新SOTA:FairMOT
- dedecms arclist中截取字符串的方法
- 浅谈线程池(下):相关试验及注意事项
- linux内核printk调试
- Linux学习之第二课时--linux命令格式及命令概述
- Redis五种数据结构应用场景
- python程序在线更新_Python自动更新功能
- 发明者本地回测平台python版[博]
- python分组和任务分配_python-使用Celery在多个队列中公平分配任务
- 并发编程学习之延时队列DelayQueue
- html 怎么看版本号,怎样查看jquery版本号?
- 实现树莓派模拟wifi进行打卡签到
- 6s连接wifi上不了网络连接服务器未响应,iPhone 6/iPhone 6S 突然连不上wifi,wifi开了连不上wifi信号差...
- 蓝桥杯每日一题(22):三升序列(python)
- JavaSE----2
- R语言学习笔记NO.2 数据处理的基础操作_变量/观测的增改选排
- 使用IDEA画结构图
- 从Github下载开源电子书
- linux docker查找镜像文件,搜索/下载/构建自定义/删除Docker镜像,运行和删除Docker容器的方法...
热门文章
- 必须掌握的Python技巧(二)
- qt弹出框自动消失的悬浮提示框_QT【简单自定义弹出提示框】:非模态,数秒后自动消失...
- pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
- express html页面,Express使用html模板
- 1900页Python系列PPT分享五:函数设计与应用(134页)
- 全国Python科研应用专题实操培训班通知
- 在计算机中如何共享文件夹,如何打开计算机共享-在电脑里设置了共享文件在另在一台电脑里怎么 – 手机爱问...
- 网络 计算机网络预备知识
- java mian 方法_Java mian函数
- mysql 分组查询例子_分组查询GROUP BY用法例子详解