基于两个字段和额外约束对SQL进行排序

时间:2013-09-05 13:24:41

标签: sql sqlite

我正在尝试编写一个SQLite查询,该查询首先通过名为mytable的列对表status_id进行排序,然后通过名为name的列进行排序,但使用以下附加约束:< / p>

SELECT name, 
       status_id 
FROM mytable 
ORDER BY status_id, name 

生成一个正确排序的表。

例如(姓名,状态):(“b”,1),(“a”,2),(“c”,2),(“b”,3),(“a”,4)。 ..

但是我需要相同类型的输出,但任何结果status_id等于2,都在结果的顶部。

e.g。 (“a”,2),(“c”,2),(“b”,1),(“b”,3),(“a”,4)......


我想出了这个,但它没有按要求运行,因为列表也没有按名称排序:

SELECT name, 
       status_id 
FROM mytable 
ORDER BY CASE status_id 
WHEN 2 THEN 0 ELSE 1 END DESC

3 个答案:

答案 0 :(得分:3)

在按CASE语句排序之后,仍然需要按status_id和name排序。

SELECT  name
        , status_id 
FROM    mytable 
ORDER BY 
        CASE WHEN status_id = 2 THEN 1 ELSE 0 END DESC
        ,status_id
        ,name

答案 1 :(得分:2)

只需按status_id对其余内容进行排序,然后在name添加ORDER BY

SELECT name, status_id 
FROM mytable 
ORDER BY CASE status_id 
         WHEN 2 THEN -1 
         ELSE status_id 
         END,
         name

答案 2 :(得分:2)

最后还添加status_id, name

SELECT name, status_id FROM mytable 
ORDER BY CASE status_id WHEN 2 THEN 1 ELSE 0 END DESC, status_id, name