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 表达式的一种数据类型的单个列。我假设 class
和 code
是 nvarchar
列,因此将日期到现在的时差转换为 nvarchar(100)
。此外,假设列 date
的值在当前 date/time 之前,并且小于 1000000000 秒,因此,它的表达式提供一个 0 填充的字符串,它可以很好地按升序排序,与向后排序的方式相同日期会排序。
您需要单独的 case
表达式。我不确定 1
、2
和 3
代表什么。让我假设它们是为了将结果按 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
中为不同的组使用单独的键。
我还应该指出,某些数据库可能具有可以简化部分代码的特殊功能。
希望这个问题还没有被问到。 我的问题是:
你知道怎么做吗
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 表达式的一种数据类型的单个列。我假设 class
和 code
是 nvarchar
列,因此将日期到现在的时差转换为 nvarchar(100)
。此外,假设列 date
的值在当前 date/time 之前,并且小于 1000000000 秒,因此,它的表达式提供一个 0 填充的字符串,它可以很好地按升序排序,与向后排序的方式相同日期会排序。
您需要单独的 case
表达式。我不确定 1
、2
和 3
代表什么。让我假设它们是为了将结果按 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
中为不同的组使用单独的键。
我还应该指出,某些数据库可能具有可以简化部分代码的特殊功能。