是否可以通过包含表达式的 ORDER
子句对结果进行排序,例如
SELECT colX0 FROM tbp_name ORDER BY (colX1 IS NOT NULL)
还是一个更复杂的表达式?
更新:
同时我找到了解决上述问题的可能性:
ORDER BY (case WHEN colX1 IS NULL THEN 1 ELSE 0 END ) ASC
但是问题仍然存在,是否可以通过表达式直接排序。
最佳答案
不,SQL Server 不支持将表达式直接转换为 true/false。
恕我直言,原因之一是三值逻辑。这有 3 个结果,而不是 2 个,任一列都是 NULL。 NULL 通常在 SQL 中位于第一个,始终是 Server,但在其他 RDBMS 中可以最后指定。
ORDER BY (colX1 = colX2)
使用 CASE 可以缓解这种情况并消除歧义
ORDER BY
CASE
WHEN colX1 = colX2 THEN 1
WHEN colX1 <> colX2 THEN 2
ELSE 3 NULL case
END
您必须根据更新使用 CASE,并确保 WHEN 子句中的数据类型匹配(或至少隐式可转换)。
关于sql-server - SQL Server 2005 使用表达式进行 Order BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706800/