1

我正在尝试编写一个 SQLite 查询,该查询mytable首先按名为的列排序表status_id,然后按名为的列排序name,但有一个额外的约束:

SELECT name, 
       status_id 
FROM mytable 
ORDER BY status_id, name 

生成一个正确排序的表。

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

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

例如 ("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
4

3 回答 3

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
于 2013-09-05T13:28:47.823 回答
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
于 2013-09-05T13:28:01.120 回答
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 
于 2013-09-05T13:28:40.360 回答