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