SQL输出矩阵

简介: 原文:SQL输出矩阵数据库环境:SQL SERVER2008R2 需求:用SQL实现如下2个图中的矩阵。            图1和图2都是行列转换的另一个变形,下面直接贴上SQL脚本。 图1的SQL实现 /*利用系统的数字辅助表,生成1-25及每连续5个数一组的组号(从1开始)...
原文: SQL输出矩阵

数据库环境:SQL SERVER2008R2

需求:用SQL实现如下2个图中的矩阵。

图1           图2

图1和图2都是行列转换的另一个变形,下面直接贴上SQL脚本。

图1的SQL实现

/*利用系统的数字辅助表,生成1-25及每连续5个数一组的组号(从1开始)*/
WITH    x0
          AS ( SELECT   ( number - 1 ) / 5 + 1 AS cn ,
                        number AS seq
               FROM     master..spt_values
               WHERE    number <= 25
                        AND number >= 1
                        AND type = 'P'
             ),/*新增一列,按组内降序排序,及在同组内从大到小排序*/
        x1
          AS ( SELECT TOP 25
                        cn ,
                        seq ,
                        ROW_NUMBER() OVER ( ORDER BY cn, seq DESC ) dseq
               FROM     x0
               ORDER BY cn ,
                        seq
             )
    /*如果是单行号,则升序;否则,降序*/
    SELECT  MAX(CASE seq % 5
                  WHEN 1 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS A ,
            MAX(CASE seq % 5
                  WHEN 2 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS B ,
            MAX(CASE seq % 5
                  WHEN 3 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS C ,
            MAX(CASE seq % 5
                  WHEN 4 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS D ,
            MAX(CASE seq % 5
                  WHEN 0 THEN CASE cn % 2
                                WHEN 1 THEN seq
                                ELSE dseq
                              END
                END) AS E
    FROM    x1
    GROUP BY cn

图2的SQL实现

/*利用系统的数字辅助表,生成1-25及每连续5个数一组的组号(从1开始)*/
WITH    x0
          AS ( SELECT   ( number - 1 ) / 5 + 1 AS cn ,
                        number AS seq
               FROM     master..spt_values
               WHERE    number <= 25
                        AND number >= 1
                        AND type = 'P'
             ),/*新增一列,按组内降序排序,及在同组内从大到小排序*/
        x1
          AS ( SELECT TOP 25
                        cn ,
                        seq ,
                        ROW_NUMBER() OVER ( ORDER BY cn, seq DESC ) dseq
               FROM     x0
               ORDER BY cn ,
                        seq
             ),/*按对5求余的规则新生成一个组号,根据原组号取整组的数据*/
        x2
          AS ( SELECT   seq % 5 AS sno ,
                        CASE cn
                          WHEN 1 THEN seq
                        END AS A ,
                        CASE cn
                          WHEN 2 THEN dseq
                        END AS B ,
                        CASE cn
                          WHEN 3 THEN seq
                        END AS C ,
                        CASE cn
                          WHEN 4 THEN dseq
                        END AS D ,
                        CASE cn
                          WHEN 5 THEN seq
                        END AS E
               FROM     x1
             )
    /*按新组号分组,排序*/
    SELECT  MAX(A) AS A ,
            MAX(B) AS B ,
            MAX(C) AS C ,
            MAX(D) AS D ,
            MAX(E) AS E
    FROM    x2
    GROUP BY sno
    ORDER BY A

当然,实现的方法不局限于上述2种。欢迎提出更好的解决思路。

目录
相关文章
|
5月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
103 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
4月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
59 6
|
4月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
338 1
|
3月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
448 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
288 3
|
4月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
4月前
|
SQL 存储 关系型数据库
关系型数据库SQL Server学习
【7月更文挑战第4天】
73 2

热门文章

最新文章

下一篇
无影云桌面