sql-server – 带有表达式的SQL Server 2005 Order BY

前端之家收集整理的这篇文章主要介绍了sql-server – 带有表达式的SQL Server 2005 Order BY前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有可能通过包含表达式的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值逻辑.这有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子句中的数据类型匹配(或至少可隐式转换).

猜你在找的MsSQL相关文章