问题: my_table中的一行包含
1
2
3
3
4
4
4
我想将行顺序重新排列为以下
4
4
4
1
3
3
2
我有什么方法可以执行此操作吗?
到目前为止我还没有编写任何代码。 (我不知道如何开始)
答案 0 :(得分:2)
或者如果您愿意,可以在您的表中完成,这意味着您的sql语句可以作为基本select *从表顺序保留为newcolumn *
*见下文
add a new column
update each row set column=1 where original_column=4
update each row set column=2 where original_column=2
update each row set column=3 where original_column=1
update each row set column=4 where original_column=3
然后按此新列排序。
答案 1 :(得分:2)
只需在CASE
中使用ORDER BY
- 它就会更清晰,更容易阅读。
...
ORDER BY CASE WHEN YourColumn = 4 then 0
WHEN YourColumn = 2 then 1
ELSE 2 END, yourcolumn
更改行的顺序也是一个坏主意,因为SQL中实际上没有固有的顺序 - 它都在表示层中,所以在ORDER BY
中使用SELECT
来完成它
答案 2 :(得分:0)
SELECT yourColumn
FROM
(
SELECT yourColumn
, CASE yourColumn
WHEN 4 THEN 1
WHEN 1 THEN 2
WHEN 3 THEN 3
WHEN 2 THEN 4
END AS SortColumn
FROM yourTable
) AS t
ORDER BY t.SortColumn ASC
这将分为4,1,3,2
答案 3 :(得分:0)
使用原始值和相应的排序顺序创建查找表:
SortLookupTable:
OriginalValue, SortOrder
1, 2
2, 4
3, 3
4, 1
然后将表格加入原始表格
SELECT T.*
FROM
MyTable T
INNER JOIN SortLookupTable S
ON T.Value = S.OriginalValue
ORDER BY
S.SortOrder;