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 ...
随机推荐
- [转]NHibernate之旅(8):巧用组件之依赖对象
本节内容 引入 方案1:直接添加 方案2:巧用组件 实例分析 结语 引入 通过前面7篇的学习,有点乏味了~~~这篇来学习一个技巧,大家一起想想如果我要在Customer类中实现一个Fullname属性 ...
- ODAC with Oracle Developer Tools for Visual Studio
c#开发Oracle数据库的时候,需要本机没有安装过 Oracle 客户端,直接下载 ODAC with Oracle Developer Tools for Visual Studio工具安装即可 ...
- yii快速入门与参考
Yii 权威指南 http://www.yiichina.com/guide/ http://www.yiiframework.com/doc/guide/1.1/zh_cn/ Ⅰ.基本概念一.入口文 ...
- windows下redis的安装配置和php扩展使用phpredis
1. 首先安装先下载redis数据库 下载地址: http://code.google.com/p/servicestack/wiki/RedisWindowsDownload 目前是2.02 ...
- 388. Longest Absolute File Path
就是看哪个文件的绝对路径最长,不是看最深,是看最长,跟文件夹名,文件名都有关. \n表示一波,可能存在一个文件,可能只有文件夹,但是我们需要检测. 之后的\t表示层数. 思路是如果当前层数多余已经有的 ...
- Codeblocks + opencv + Cmake + minGW 环境搭建(一劳永逸版)
应工作开发需要,今天搭建一个codeblocks的C++开发环境,需要配置opencv2.4.4的API协同开发. 1.为了避免不必要的配置编译器,下载codeblocks16.1带mingw编译器版 ...
- Jsp学习(2)
Jsp的三大指令 (1).include 作用:相当于把当前页面去包含页面 语法: <%@include file="/common/test.jsp" %> 实例如下 ...
- JAVA从零单排之前因
本人,男,21岁,普通院校本科,计算机专业.大学之前对计算机编程没有一点涉及.大学学计算机专业也是个偶然.因为当初高考的成绩不好,结果都是我父亲帮我报的学校和专业. 上了大学之后,大一都是在新奇中度过 ...
- How to delete a large number of data in SharePoint for List when refreshing data?
Preface Recently thequestion was asked in the newsgroups about deleting a large number of itemsfrom ...
- Highcharts可拖动式图表
Highcharts可拖动式图表 默认情况下,Highcharts依据给定的数据列生成图表. 浏览者是无法改动图表的. 假设浏览者须要手动调整数据节点.就须要借助第三方插件Draggable Poin ...