SQL查询返回矩阵

时间:2014-08-21 07:27:17

标签: sql sql-server

我有一组包含一列实际数据的行。目标是以Matrix格式显示此数据。列的数量将保持不变,行数可能会有所不同。

例如:

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

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

不确定如何实现。

任何建议都会有所帮助。

进一步添加 - 我已设法生成名称值与列名和值的关联。示例 -
Name1 Col01
Name2 Col02
名称3 Col03
Name4 Col01
名称5 Col02

2 个答案:

答案 0 :(得分:3)

您可以使用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

答案 1 :(得分:0)

一般来说:

  • SQL用于检索数据,即一列中的所有X记录
  • 对数据进行良好的显示通常是查询SQL的软件的工作,例如:您的网络/桌面应用程序。

但是,如果您真的想在SQL中构建显示输出,可以使用与WHILELIMIT相关联的PIVOT循环。您只需选择前5个记录,而不是下一个记录,直到完成。

以下是如何使用WHILEhttp://msdn.microsoft.com/de-de/library/ms178642.aspx

的示例