首页 > 解决方案 > MSSQL 在 ORDER BY 列表的位置 1 中遇到常量表达式

问题描述

问题:

这是一个查询,应该对表进行排序,如果“归档”列中的至少一个值不为空,它可以正常工作,但在我的情况下,归档列的所有值都可以为空是可能且有效的。

当至少一个值不为空时,则应对其进行排序。

样本1(作品):

id|Archived
0 |NULL
1 |NULL
2 |0
3 |1

Sample2(不工作,但可能且有效的方案):

id|Archived
0 |NULL
1 |NULL
2 |NULL
3 |NULL

查询示例:

SELECT ... FROM Table1 
   ORDER BY 
      CASE archived WHEN NULL THEN 1 ELSE 0 END DESC,
      CASE id WHEN NULL THEN 0 ELSE 1 END DESC

如何解决此类问题?

标签: sql-serversql-order-by

解决方案


您不能CASEORDER BY. 相反,您可以这样做:

SELECT ... FROM Table1 
   ORDER BY 
      CASE WHEN archived IS NULL THEN 1 ELSE 0 END DESC,
      CASE WHEN id IS NULL THEN 0 ELSE 1 END DESC

推荐阅读