首页 > 解决方案 > 在行上排列

问题描述

我是 SQL 新手,并试图在单个语句中置换 SQL 中的矩阵。

我曾尝试使用 order by,但我不确定如何去做,因为这种方法需要按行排序两次。

目前我正在尝试:

select * from matrix, order by i=1;
select * from matrix, order by i desc;

[行- i 列- j 值- val]

原始矩阵:

1, 2, 3
4, 5, 6
7, 8, 2

所需矩阵:

7, 8, 2
1, 2, 3
4, 5, 6

(行 0->1、1->2、2->0)

我想在单个 sql 查询中实现所需的矩阵。

标签: sqlsql-order-by

解决方案


假设矩阵的第一列代表记录的顺序(您的样本数据倾向于表明),这可以使用窗口函数来实现(在大多数 RDBMS 上可用,但通常并非在所有版本上都可用)。

您可以使用LEAD(c1) OVER(ORDER BY c1)检索下一条记录的 id,并使用此值对结果进行排序:

SELECT * FROM mytable t ORDER BY LEAD(c1) OVER(ORDER BY c1);

DB Fiddle 上的演示

WITH mytable AS (SELECT 1 c1, 2 c2, 3 c3 UNION ALL SELECT 4, 5, 6 UNION ALL SELECT 7, 8, 2)
SELECT * FROM mytable t ORDER BY LEAD(c1) OVER(ORDER BY c1);
GO

c1 | c2 | c3
 -: | -: | -:
  7 | 8 | 2
  1 | 2 | 3
  4 | 5 | 6
 


推荐阅读