SQL 当主排序依据是 Case 语句时,底部的排序依据空白?

SQL Order By blanks at bottom when the main order by is a Case statement?

我想 ORDER BY 列出结果底部为空白的项目,但主要的排序依据是 case 语句。

所以,我的主要 Order By 子句是这样的:

ORDER BY CASE WHEN pub = 1 THEN title ELSE t.othertitle END;

为此,我想应用以下 CASE,以便空白位于底部:

ORDER BY CASE WHEN (above case) = '' THEN 1 ELSE 0 END

问题是我无法嵌入 CASE 语句。

如何做到这一点?

谢谢!

您实际上可以嵌入 case 语句

ORDER BY CASE COALESCE(CASE pub WHEN 1 THEN title ELSE t.othertitle END, '') WHEN '' THEN 1 ELSE 0 END

当将 Case 语句构造为 return INT 时,它只能(?)包含在 Order by 中。创建您喜欢的任何类型的排序逻辑,但要确保它 return 是一个升序排列的 INT:

order by
(case when pub = 1 then 1
      when pub is null or pub = '' then 2
      else 3 end)

您可以明确地这样做:

ORDER BY (CASE WHEN pub = 1 AND title = '' THEN 1
               WHEN pub <> 1 AND t.othertitle = '' THEN 1
               ELSE 2
          END) DESC,
         (CASE WHEN pub = 1 THEN title ELSE t.othertitle END)

您没有指定您的 DBMS,所以这是 ANSI SQL:

ORDER BY nullif(CASE WHEN pub = 1 THEN title ELSE t.othertitle END, '') NULLS LAST