在行上进行排列

时间:2019-02-15 22:54:33

标签: sql sql-order-by

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

我尝试使用order by,但是我不确定该怎么做,因为这种方法需要两次对行进行排序。

当前我正在尝试:

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

[行-我 列-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查询中实现所需的矩阵。

1 个答案:

答案 0 :(得分:0)

假设矩阵的第一列代表记录的顺序(示例数据倾向于指示记录的顺序),则可以使用窗口函数(在大多数RDBMS上可用,但通常不是在所有版本上都可用)来实现。

您可以使用('C', 15) ('D', 4) ('F', 7) ('G', 5) ('J', 5) ('K', 1) 检索下一条记录的ID,并使用此值对结果进行排序:

LEAD(c1) OVER(ORDER BY c1)

Demo on DB Fiddle

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

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