SQL重新排列行顺序

时间:2011-12-06 18:27:24

标签: sql tsql

问题: my_table中的一行包含

1
2
3
3
4
4
4

我想将行顺序重新排列为以下

4
4
4    
1
3
3
2

我有什么方法可以执行此操作吗?

到目前为止我还没有编写任何代码。 (我不知道如何开始)

4 个答案:

答案 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;