1

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

4

6 回答 6

5
ORDER BY CASE WHEN X IS NULL THEN 0 ELSE 1 END, Y
于 2013-09-16T03:51:17.923 回答
4

您可以在以下位置使用CASE语句ORDER BY

ORDER BY 
    CASE WHEN X IS NULL THEN 0 ELSE 1 END ASC, Y
于 2013-09-16T03:53:09.133 回答
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 在输出中,只需在外部选择中指定所有其他列。

于 2013-09-16T03:49:09.917 回答
0
SELECT * FROM TABLENAME ORDER BY X ,Y
于 2013-09-16T05:20:55.920 回答
0

您可以使用如下查询:

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

, CREATETIMESTAMP.

有关更多详细信息,您可以在此处查看

于 2013-09-16T06:55:16.483 回答
0

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

ORDER BY FIELD(Xcolumn, NULL) DESC, Ycolumn DESC
于 2013-09-16T03:56:08.077 回答