Order By case when then with multiple ASC/DESC

Order By case when then with multiple ASC/DESC

希望这个问题还没有被问到。 我的问题是:

你知道怎么做吗

  ORDER BY 
  CASE 
    WHEN job = "jounalist" then 1, date desc 
    WHEN job = "teacher" then 2, class asc
    WHEN job = "dev" then 3, code asc 
    ELSE 4 
ORDER BY 
  CASE 
    WHEN job = "jounalist" then 1 
    WHEN job = "teacher" then 2
    WHEN job = "dev" then 3 
    ELSE 4
  END asc
  CASE 
    WHEN job = "jounalist" then Right(cast(1000000000 + Datediff(second, date, GetDate()) as nvarchar(100)),  9) 
    WHEN job = "teacher" then class
    WHEN job = "dev" then code
    ELSE N''
  END asc

您只能 return 来自 case 表达式的一种数据类型的单个列。我假设 classcodenvarchar 列,因此将日期到现在的时差转换为 nvarchar(100)。此外,假设列 date 的值在当前 date/time 之前,并且小于 1000000000 秒,因此,它的表达式提供一个 0 填充的字符串,它可以很好地按升序排序,与向后排序的方式相同日期会排序。

您需要单独的 case 表达式。我不确定 123 代表什么。让我假设它们是为了将结果按 CASE 表达式的顺序排列:

ORDER BY (CASE WHEN job = 'journalist' THEN 1
               WHEN job = 'teacher' THEN 2
               WHEN job = 'dev' THEN 3
               ELSE 4
          END),
         (CASE WHEN job = 'journalist' THEN date END) DESC,
         (CASE WHEN job = 'teacher' THEN class END),
         (CASE WHEN job = 'code' THEN code END)

一个CASE表达式returns一个类型。为此,我不建议将值转换为单一类型。相反,只需在 ORDER BY 中为不同的组使用单独的键。

我还应该指出,某些数据库可能具有可以简化部分代码的特殊功能。