如何使用单条SQL语句实现指定数据表的转换输出?
单条SQL实现指定数据重排需求
原始表数据
| Col1 | Col2 | Col3 |
|---|---|---|
| 1 | 2000 | 500 |
| 2 | 9000 | 200 |
| 3 | 5000 | 900 |
| 4 | 4000 | 600 |
期望输出
| col1 | col2 | col3 |
|---|---|---|
| 1 | 9000 | 200 |
| 2 | 5000 | 500 |
| 3 | 4000 | 600 |
| 4 | 2000 | 900 |
可以用窗口函数ROW_NUMBER()实现单条SQL的转换,核心思路是通过生成行号关联排序后的Col2、Col3与原表的Col1顺序:
SELECT t.col1, t2.col2, t3.col3 FROM (SELECT col1, ROW_NUMBER() OVER(ORDER BY col1) AS rn FROM your_table) t INNER JOIN (SELECT col2, ROW_NUMBER() OVER(ORDER BY col2 DESC) AS rn FROM your_table) t2 ON t.rn = t2.rn INNER JOIN (SELECT col3, ROW_NUMBER() OVER(ORDER BY col3 ASC) AS rn FROM your_table) t3 ON t.rn = t3.rn ORDER BY t.col1;
说明:
- 子查询
t按col1升序生成行号,保留原始行的顺序标识 - 子查询
t2按col2降序生成行号,将col2从大到小排序后对应到目标位置 - 子查询
t3按col3升序生成行号,将col3从小到大排序后对应到目标位置 - 最后通过行号
rn关联三个数据集,得到期望的输出结果
内容的提问来源于stack exchange,提问作者GVA
相关产品推荐
相关产品推荐

