sql-server - SQL Server 2005 使用表达式进行 Order BY

标签 sql-server sql-server-2005

是否可以通过包含表达式的 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/

相关文章:

sql - 在可安排培训师的定义空间内查找连续日期

sql - 使用约束检查sql唯一值

sql - 从SQL View 中的数据行执行字符串连接(数据透视?)

sql-server - SQL Server 分区表和 Entity Framework

sql-server - 在 SSIS 的 DerivedColumn 数据流任务中检查数字

sql-server - 如何从代码获取复制状态

sql-server - 连接 varchar(max) 变量 SQL Server 2005

sql - SSIS 在更新期间挂起,有 300 万行

sql - 操作数类型冲突 : varchar is incompatible with User-Defined Table Type

SQL Server 表关系