带有表达式的SQL Server 2005 Order BY

时间:2011-01-16 17:15:58

标签: 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

然而问题仍然存在,如果有可能通过表达式直接命令。

4 个答案:

答案 0 :(得分:16)

不,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子句中的数据类型匹配(或至少可隐式转换)。

答案 1 :(得分:5)

你可以使用

ORDER BY CASE WHEN condition= 1 THEN 1 ELSE 2 END

答案 2 :(得分:1)

您可以按列的序号位置进行排序,如果您想查看要排序的数据...例如,如果您想按第1列排序,只需说'ORDER BY 1' 。这是一个例子,我在select子句中添加一个表达式..然后我按顺序by

命令
SELECT colX0, 
(case WHEN colX1 IS NULL THEN 1 ELSE 0 END )
 FROM tbp_name 
ORDER BY 2 

答案 3 :(得分:0)

您需要将其放在首先选择的

SELECT 
  colX0, 
  CASE WHEN colX1 IS NOT NULL THEN 0 ELSE 1 END AS [COMPUTED1]
FROM tbp_name 
ORDER BY COMPUTED1

无论如何,它总是出类拔萃。 http://www.tizag.com/sqlTutorial/sqlcase.php