我正在使用 SQL Server 2008 R2。
我想要对表中的记录进行基于优先级的排序。
所以我在 ORDER BY 子句中使用 CASE WHEN 语句。 ORDER BY 子句如下:
ORDER BY
CASE WHEN TblList.PinRequestCount <> 0 THEN TblList.PinRequestCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.HighCallAlertCount <> 0 THEN TblList.HighCallAlertCount desc, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.HighAlertCount <> 0 THEN TblList.HighAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
CASE WHEN TblList.MediumCallAlertCount <> 0 THEN TblList.MediumCallAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, TblList.MiddleName ASC END,
Case WHEN TblList.MediumAlertCount <> 0 THEN TblList.MediumAlertCount DESC, TblList.LastName ASC, TblList.FirstName ASC, Patlist.MiddleName ASC END
但它给出了 Incorrect syntax near the keyword 'desc'
有什么解决办法吗?
我也可以拥有:
TblList.PinRequestCount <> 0 and TblList.HighCallAlertCount <> 0 and
TblList.HighAlertCount <> 0` and TblList.MediumCallAlertCount <> 0 and
TblList.MediumAlertCount <> 0
同时。
原文由 Dev 发布,翻译遵循 CC BY-SA 4.0 许可协议
CASE
是一个 表达式- 它返回 单个 标量值(每行)。它不能返回解析树的复杂部分,例如 --- 语句的SELECT
ORDER BY
子句。看起来你只需要:
或者可能:
判断上述哪个(或其他)是您要查找的内容有点棘手,因为您 a) 没有 解释 您要实现的实际排序顺序,并且 b) 没有提供任何 示例数据 和预期的结果,我们可以从中尝试 推断 您尝试实现的实际排序顺序。
这可能是我们正在寻找的答案: