按子句排序的空值

时间:2013-09-16 03:44:12

标签: sql sql-server

我有一个奇怪的场景,我需要将所有行保持在顶部,其中X列具有NULL值,否则按Y列排序。你能帮我写一下查询吗?

6 个答案:

答案 0 :(得分:5)

ORDER BY CASE WHEN X IS NULL THEN 0 ELSE 1 END, Y

答案 1 :(得分:4)

您可以在ORDER BY中使用CASE声明:

ORDER BY 
    CASE WHEN X IS NULL THEN 0 ELSE 1 END ASC, Y

答案 2 :(得分:1)

在这里,这将适用于任何sql平台 - 对于特定平台,可能有更好的方法来实现它。

SELECT * FROM
(
  SELECT 1 AS orderC, *
  FROM tableName
  WHERE Xcolumn is null
  UNION ALL
  SELECT 2 AS orderC, *
  FROM tableName
  WHERE Xcolumn is not null
)
ORDER BY orderC ASC, columnY

注意,如果您不希望orderC出现在输出中,只需指定外部选择中的所有其他列。

答案 3 :(得分:0)

在使用之前分享我学到的东西:

ORDER BY FIELD(Xcolumn, NULL) DESC, Ycolumn DESC

答案 4 :(得分:0)

SELECT * FROM TABLENAME ORDER BY X ,Y

答案 5 :(得分:0)

您可以使用如下查询:

  SELECT * FROM Emp WHERE empId= 6 AND DELETED = 0
    ORDER BY  CASE WHEN DOB IS NULL THEN 0 ELSE 1 END

, CREATETIMESTAMP.

有关详细信息,请参阅here