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
我想 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