sql - 在行上排列
问题描述
我是 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 查询中实现所需的矩阵。
解决方案
假设矩阵的第一列代表记录的顺序(您的样本数据倾向于表明),这可以使用窗口函数来实现(在大多数 RDBMS 上可用,但通常并非在所有版本上都可用)。
您可以使用LEAD(c1) OVER(ORDER BY c1)
检索下一条记录的 id,并使用此值对结果进行排序:
SELECT * FROM mytable t ORDER BY LEAD(c1) OVER(ORDER BY c1);
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
推荐阅读
- r - 有没有办法在 R 中创建匹配条件的多个列的总和范围?
- matplotlib - 删除 Matplotlib 中的填充
- matlab - 穿过三角网格的线(MatLab)
- c++ - 使用非类型模板参数时未定义的引用
- gitlab - 如果一个 Gitlab 存储库是独立的存储库(不是分叉),如何使一个 Gitlab 存储库成为另一个 Gitlab 存储库的分支?
- google-apps-script - 带有动态转到部分的 Google 表单列表项
- node.js - 从 TypeScript 模块中的抽象类访问继承的函数
- c++ - CPLEX C++:避免将变量添加到两个变量数组中
- c++ - 将 c++ 转换为 c(cout 输入函数)
- amazon-cloudwatch - HTTP 请求上的 CloudWatch 事件触发器