MSSQL ORDER BY列表中的位置1遇到常量表达式

时间:2019-03-14 11:38:18

标签: sql-server sql-order-by

问题:

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

如果至少一个值不为null,则应对其进行排序。

样本1(有效):

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

样本2(无效,但可能有效的szenario):

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

如何解决此类问题?

2 个答案:

答案 0 :(得分:0)

您不能在CASE中使用ORDER 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

答案 1 :(得分:-1)

从工作样本中,我认为您不希望数据按降序排序,对吧?

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