SQL输出矩阵
数据库环境:SQL SERVER2008R2
需求:用SQL实现如下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种。欢迎提出更好的解决思路。
SQL输出矩阵的更多相关文章
- 灵活控制 Hibernate 的日志或 SQL 输出(包含参数),以便于诊断
首先参考:http://blog.csdn.net/zljjava/article/details/7534349 [灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断] 我的具体配置 ...
- 笔试题&面试题:CW输出矩阵
称号:CW输出矩阵(N*N). 如果一个矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 那么程序应该给出的输出为:1 2 3 4 8 1 ...
- python 按位置关系输出矩阵元素
描述:依次输出矩阵中最近邻的元素 例如:输入: [[1, 2, 3] [4, 5, 6] [7, 8, 9]] 输出: [[ 1. 2. 4. 5. 3. 6. 7. 8. 9.] [ ...
- python如何输出矩阵的行数与列数?
Python如何输出矩阵的行数与列数? 对于pyhton里面所导入或者定义的矩阵或者表格数据,想要获得矩阵的行数和列数有以下方法: 1.利用shape函数输出矩阵的行和列 x.shape函数可以输出一 ...
- Mingyang.net:格式化Hibernate的SQL输出语句
在sping与hibernate整合中可以这样的设置 <property name="hibernateProperties"> <props> <p ...
- 把sql输出成。sql文件
作者原创,转载注明出处: 代码: package importfile; import java.io.*; import java.io.PrintWriter; import java.sql.C ...
- sql server 获取动态sql输出结果
不带输出结果 我们一般会这样写 例子:一个输出6位递增号码结果 ALTER proc GetCode ), ) as declare @sqlstring nvarchar(max) set @sql ...
- 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...
- (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断
背景:项目开发需要.之前对于hibernate日志输出,log4j的绑定,之间的关系一直不是很清楚.终于找到一篇介绍的很详细的文章. 文章出处:https://unmi.cc/hibernate-lo ...
随机推荐
- 【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
原文网址:http://blog.csdn.net/mad1989/article/details/8167529 最近项目到了最后的阶段,测试完一切ok后,准备打包以及提交,不料看到网上众教程,好多 ...
- android 使用android.support.v7 添加ActionBar
当需要在 android 7或更高的版本使用 ActionBar,则可以通过继承ActionBarActivity来实现, 网上有一个开源项目来兼容老版本显示ActionBar的效果:ActionBa ...
- poj 2586 Y2K Accounting Bug
http://poj.org/problem?id=2586 大意是一个公司在12个月中,或固定盈余s,或固定亏损d. 但记不得哪些月盈余,哪些月亏损,只能记得连续5个月的代数和总是亏损(<0为 ...
- Windows 8 Hyper-V虚拟机功能(转载)
刚才看见一兄弟w500折腾win8 hyper-v功能,普及下吧,欢迎各位斧正 Windows 8 中 Hyper-V 3.0 的 CPU 支持说明 Windows 8 将直接内置 Hyper-V 3 ...
- POJ 3186Treats for the Cows (区间DP)
详见代码 #include <stdio.h> #include <algorithm> #include <string.h> using namespace s ...
- cout internal
cout internal */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola," ...
- 基于UDP协议的控制台聊天
这几天学了java的网络编程弄出一个基于UDP协议的聊天工具 功能 添加并且备注好友(输入对方的ip) 删除好友 查看好友列表 用java写的控制台程序导出可执行程序后不能双击打开 还需要些一个脚本文 ...
- linux下如何执行PHP脚本
Linux 下如何直接执行 php 脚本? 下面是部分 php 命令行参数. 用法 php [-q] [-h] [-s] [-v] [-i] [-f ] | { [args...]} -q 安静模式, ...
- Uber入驻四川乐山峨眉地区
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- tar打包和解压命令
如果你有一个大文件 想下载下来 但是又太大 可以压缩一下 然后打包 #压缩 tar -czvf ***.tar.gz tar -cjvf ***.tar.bz2 #解压缩 tar -xzvf ***. ...