5
select * from table1
order by case Language when null then 1 else 0 end, Language

无论我使用哪种方式,它总是首先显示空值。是否有标准方法允许非空值优先排序?

多谢你们

4

3 回答 3

21

你不需要WHEN

SELECT * FROM table1
ORDER BY Language IS NULL, Language

运算符IS将在 true 时返回 1,否则返回 0 ( Operators )。

编辑:处理空TEXT,也:

SELECT * FROM table1
ORDER BY Language IS NULL OR Language='', Language

ORDER BY子句使用两个字段:

  1. Language IS NULL OR Language=''. 这是一个布尔表达式(在 SQLite 中导致0(false) 或1(true)),与(Language IS NULL) OR (Language='')

  2. 当第一个字段具有相同的结果时,使用第二个字段:Language.

这样,每当LanguageisNULL或 empty时TEXT,第一个字段将是1,在其他结果之后依赖这些结果,评估为0。然后,第二个字段用于对所有Language有内容的结果进行排序。

于 2013-10-28T09:07:31.877 回答
4

is检查时必须使用运算符null

select * from table1
order by case when Language is null then 1 else 0 end, 
         Language
于 2013-10-28T08:09:54.780 回答
0

这是 LS_dev 对 UNION 的回答的扩展。不是一个好方法,但我想不出任何其他方法来使它工作,因为文档说:

如果 SELECT 是复合 SELECT,则不是输出列别名的 ORDER BY 表达式必须与用作输出列的表达式完全相同。

select * from (
    SELECT * FROM table1 -- but this select can have union in it
) ORDER BY Language IS NULL or Language = '', Language
于 2015-03-03T13:34:10.150 回答