SQL查询返回矩阵

标签 sql sql-server

我有一组行,其中有一列实际数据。目标是以矩阵格式显示此数据。列数将保持不变,行数可能会有所不同。

例如:

  • 我有 20 条记录。如果我有 5 列 - 那么行数将为 4
  • 我有 24 条记录。我有 5 列,行数为 5,第 5 行的第 5 列为空。
  • 我有 18 条记录。我有 5 列,行数为 4,第 4 行中的第 4 列和第 5 列为空。

我正在考虑针对每一行生成一个列值。该列值将在 5 行后重复。但我不能问题是“为变量赋值的 SELECT 语句不得与数据检索操作结合使用”

不确定如何实现。

任何建议都会有帮助。

进一步补充 - 我已成功生成与列名称和值的名称值关联。示例 -
名称1 Col01
名称2 Col02
名称3 Col03
名称4 Col01
名称5 Col02

最佳答案

您可以使用ROW_NUMBER分配从0开始的连续整数。然后按整数除法的结果进行分组,同时以余数为基础。

WITH T AS
(
SELECT number, 
        ROW_NUMBER() OVER (ORDER BY number) -1 AS RN
FROM master..spt_values
)
SELECT MAX(CASE WHEN RN%5 = 0 THEN number END) AS Col1,
       MAX(CASE WHEN RN%5 = 1 THEN number END) AS Col2,
       MAX(CASE WHEN RN%5 = 2 THEN number END) AS Col3,
       MAX(CASE WHEN RN%5 = 3 THEN number END) AS Col4,
       MAX(CASE WHEN RN%5 = 4 THEN number END) AS Col5
FROM T
GROUP BY RN/5
ORDER BY RN/5

关于SQL查询返回矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25420580/

相关文章:

sql-server - SSRS - 进程在不使用后死亡/进入休眠状态

sql - 薪水> $4000的加薪10%,其余加薪5%

sql - 将 DB2 SQL Decimal 转换为 DATE

mysql - MySQL 中何时使用单引号、双引号和反引号

sql - 获取SQL Server上个月的记录

sql - MS SQL : Auto-increased key conflict

sql - 循环遍历模式中的表

sql - 如何在 SQL where 子句中执行条件语句

sql - 如何使用 RANK 对匹配记录进行分组

sql - 如何使用 SQL Server 的 INNER JOIN 进行删除?