数据库环境: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输出矩阵的更多相关文章

  1. 灵活控制 Hibernate 的日志或 SQL 输出(包含参数),以便于诊断

    首先参考:http://blog.csdn.net/zljjava/article/details/7534349  [灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断] 我的具体配置 ...

  2. 笔试题&amp;面试题: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 ...

  3. python 按位置关系输出矩阵元素

    描述:依次输出矩阵中最近邻的元素 例如:输入: [[1, 2, 3] [4, 5, 6] [7, 8, 9]] 输出: [[ 1.  2.  4.  5.  3.  6.  7.  8.  9.] [ ...

  4. python如何输出矩阵的行数与列数?

    Python如何输出矩阵的行数与列数? 对于pyhton里面所导入或者定义的矩阵或者表格数据,想要获得矩阵的行数和列数有以下方法: 1.利用shape函数输出矩阵的行和列 x.shape函数可以输出一 ...

  5. Mingyang.net:格式化Hibernate的SQL输出语句

    在sping与hibernate整合中可以这样的设置 <property name="hibernateProperties"> <props> <p ...

  6. 把sql输出成。sql文件

    作者原创,转载注明出处: 代码: package importfile; import java.io.*; import java.io.PrintWriter; import java.sql.C ...

  7. sql server 获取动态sql输出结果

    不带输出结果 我们一般会这样写 例子:一个输出6位递增号码结果 ALTER proc GetCode ), ) as declare @sqlstring nvarchar(max) set @sql ...

  8. 灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

    我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或 ...

  9. (转)灵活控制 Hibernate 的日志或 SQL 输出,以便于诊断

    背景:项目开发需要.之前对于hibernate日志输出,log4j的绑定,之间的关系一直不是很清楚.终于找到一篇介绍的很详细的文章. 文章出处:https://unmi.cc/hibernate-lo ...

随机推荐

  1. selenium webdriver(1)---浏览器操作

    启动浏览器 如何启动浏览器已在上篇文章中说明,这里还是以chrome为例,firefox.IE启动方式相同. //启动浏览器 import org.openqa.selenium.WebDriver; ...

  2. 移动平台WEB前端开发技巧

    1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用 <meta content="width=device-width ...

  3. ASP.NET中设置一个定时器来定时更新 转

    asp.net 定时器 比较少用,  中国红木网这是一个相当实用的功能,有了RSS博客镜像,就不需要在多处同时发布博客日志了.比如你同时在新浪上有自己的博客,又同时有自己的个人博客站点,那么你只需要在 ...

  4. iPhone/Mac Objective-C内存管理教程和原理剖析

    http://www.cocoachina.com/bbs/read.php?tid-15963.html 版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所 ...

  5. Shell函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  6. poj 2828 Buy Tickets【线段树单点更新】【逆序输入】

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 16273   Accepted: 8098 Desc ...

  7. UVA 10194 Football (aka Soccer)

     Problem A: Football (aka Soccer)  The Problem Football the most popular sport in the world (america ...

  8. javascript如何监听页面刷新和页面关闭事件

    本文转之http://www.qqtimezone.top 在我们的日常生活中,时常遇到这么一种情况,当我们在点击一个链接.关闭页面.表单提交时等情况,会提示我们是否确认该操作等信息. 这里就给大家讲 ...

  9. java集合类之TreeMap

    转自:http://blog.csdn.net/chenssy/article/details/26668941 TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的 ...

  10. hdu 1199 Color the Ball(离散化线段树)

    Color the Ball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...