本文是“打印矩阵”系列的第三篇文章。

我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵。

规则:

  1. 使用 1~25 的数字依序填充矩阵;
  2. 从第一行第一列开始填充,沿着列的方向进行。如果是奇数列,从上往下填;如果是偶数列,则从下往上填;
  3. 第一列填满就到第二列,再到第三列,直到把矩阵都填满。

这个需求比前两篇的复杂度高,主要在于我们没法一下子看出每行数据出现的规律。

没思路?没关系,继续往下看就是了。

第一步,生成 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 打印矩阵(三)相关推荐

  1. sql max同一行_SQL 打印矩阵(三)

    本文是"打印矩阵"系列的第三篇文章. 我们再次把难度提升,使用 SQL 打印出如下表所示的矩阵. 规则: 使用 1~25 的数字依序填充矩阵: 从第一行第一列开始填充,沿着列的方向 ...

  2. 单元格内多个姓名拆分成一列_把订单按货品拆分成多行

    办公的小伙伴们,今天小编来和大家分享:如何将一个单元格中有多行数据拆分成多行. 看下图:要把订单按货品拆分成多行明细. 下面给出几种不同的方法. 方法一:借word来拆分内容 Step1:把表格复制到 ...

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

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

  4. 如何将SQL查询出的两列合并成一列显示,并用逗号隔开

    如何将SQL查询出的两列合并成一列显示,并用逗号隔开 先给出一个表 DROP TABLE IF EXISTS `apps`; CREATE TABLE `apps` (`id` int NOT NUL ...

  5. SQL SERVER 如何把1列多行数据 合并成一列显示

    示例 修改前:1列多行数据 修改后:合并成一列 示例语句 1 2 3 4 5 6 7 8 9 10 11 select 类别,     名称 = (         stuff(            ...

  6. SQL——将两列合并成一列

    将两列合并连接成一列,需要注意的是列的格式必须是NVARCHAR或者VARCHAR类型 1 SELECT ','+Convert(NVARCHAR(30), call_uuid, 0 ) +','+a ...

  7. oracle 将多列数据合并成一列显示

    将多列数据合并成一列数据显示 方法一:执行update语句,之后select 出来,这个不是本次的重点 方法二:不执行update语句,直接select出来的时候就显示了,但是不改变表结构和数据 (A ...

  8. java怎么写合并列sql_SQL STUFF函数 拼接字符串 多列 合并成一列 转

    关于和并列的 要这种效果. create table tb(idint, value varchar(10)) insert into tbvalues(1,'aa') insert into tbv ...

  9. as cast float server sql_面试常考!SQL行转列和列转行

    来源:CSDN 作者:潇湘隐者 原文地址:www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html 大家好,我是小五 今天和大家分享的内容是关 ...

最新文章

  1. IM4Java + GraphicsMagick 实现高清图片剪裁处理
  2. jde多目标_华科开源多目标跟踪(MOT)实时新SOTA:FairMOT
  3. dedecms arclist中截取字符串的方法
  4. 浅谈线程池(下):相关试验及注意事项
  5. linux内核printk调试
  6. Linux学习之第二课时--linux命令格式及命令概述
  7. Redis五种数据结构应用场景
  8. python程序在线更新_Python自动更新功能
  9. 发明者本地回测平台python版[博]
  10. python分组和任务分配_python-使用Celery在多个队列中公平分配任务
  11. 并发编程学习之延时队列DelayQueue
  12. html 怎么看版本号,怎样查看jquery版本号?
  13. 实现树莓派模拟wifi进行打卡签到
  14. 6s连接wifi上不了网络连接服务器未响应,iPhone 6/iPhone 6S 突然连不上wifi,wifi开了连不上wifi信号差...
  15. 蓝桥杯每日一题(22):三升序列(python)
  16. JavaSE----2
  17. R语言学习笔记NO.2 数据处理的基础操作_变量/观测的增改选排
  18. 使用IDEA画结构图
  19. 从Github下载开源电子书
  20. linux docker查找镜像文件,搜索/下载/构建自定义/删除Docker镜像,运行和删除Docker容器的方法...

热门文章

  1. 必须掌握的Python技巧(二)
  2. qt弹出框自动消失的悬浮提示框_QT【简单自定义弹出提示框】:非模态,数秒后自动消失...
  3. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...
  4. express html页面,Express使用html模板
  5. 1900页Python系列PPT分享五:函数设计与应用(134页)
  6. 全国Python科研应用专题实操培训班通知
  7. 在计算机中如何共享文件夹,如何打开计算机共享-在电脑里设置了共享文件在另在一台电脑里怎么 – 手机爱问...
  8. 网络 计算机网络预备知识
  9. java mian 方法_Java mian函数
  10. mysql 分组查询例子_分组查询GROUP BY用法例子详解