将输出重新排序为预定义序列

时间:2014-05-23 18:55:54

标签: sql sql-server

我正在尝试从按预定义的5个字母序列排序的表中获取输出。 即L> C> E> O>一个 通过使用顺序我不能得到所需的结果。我正在使用SQL server db。

如果我可以在查询中定义序列,请任何人建议我吗? 所以我得到的结果是L> C> E> O>甲

先谢谢。

2 个答案:

答案 0 :(得分:4)

select * from your_table
order by case when some_column = 'L' then 1
              when some_column = 'C' then 2
              when some_column = 'E' then 3
              when some_column = 'O' then 4
              when some_column = 'A' then 5
         end desc

答案 1 :(得分:0)

如果要对两个或多个查询使用这些排序条件,则可以为此创建一个表:

CREATE TABLE dbo.CustomSort (
    Value VARCHAR(10) PRIMARY KEY,
    SortOrder INT NOT NULL
);
GO
INSERT INTO dbo.CustomSort (Value, SortOrder) VALUES ('L', 1);
INSERT INTO dbo.CustomSort (Value, SortOrder) VALUES ('C', 2);
INSERT INTO dbo.CustomSort (Value, SortOrder) VALUES ('E', 3);
INSERT INTO dbo.CustomSort (Value, SortOrder) VALUES ('O', 4);
INSERT INTO dbo.CustomSort (Value, SortOrder) VALUES ('A', 5);
GO

然后您可以使用x表加入源表(在此示例中为dbo.CustomSort),因此:

SELECT  x.Col1
FROM    
(
    SELECT 'E' UNION ALL 
    SELECT 'C' UNION ALL 
    SELECT 'O'
) x(Col1) INNER JOIN dbo.CustomSort cs ON x.Col1 = cs.Value 
ORDER BY cs.SortOrder
/*
Col1
----
C
E
O
*/

我更新了dbo.CustomSort表,然后所有查询都将使用新的排序条件。