【发布时间】:2021-01-19 07:12:51
【问题描述】:
我想在 Order By 之前有一个条件语句。
在下面的查询中,Marks 有可能为空,在这种情况下,我想按 Rank Asc 排序
SELECT TOP 1 P.[Score]
FROM dbo.[Profile] P
WHERE P.[ProfileId] = @ProfileId
ORDER BY P.[Marks] DESC AS [ProfileScore]
我尝试将其更改为以下方式,但它给出了编译错误
SELECT TOP 1 P.[Score]
FROM dbo.[Profile] P
WHERE P.[ProfileId] = @ProfileId
ORDER BY
(CASE WHEN P.[Marks] IS NOT NULL THEN P.[Marks] END) DESC,
(CASE WHEN P.[Marks] IS NULL THEN P.[Rank] END) ASC AS [ProfileScore]
但它给出了一个错误:
关键字“DESC”附近的语法不正确
【问题讨论】:
-
case是一个表达式而不是一个语句。请告诉我们错误。从 order by 中删除“AS [ProfileScore]”,您不使用别名 order by 条款。 -
除非表中的所有标记都为 NULL,否则您的原始查询仍将按最高标记对数据进行排序到最低标记,然后仅选择前 1 行。同样正如@Dale 提到的,删除
AS [ProfileScore]。 -
您的
ORDER BY中有太多AS [ProfileScore]。您不能在ORDER BY中创建别名。 -
嗨 Dale,当我执行查询时,它在关键字“DESC”附近显示 InCorrect syntax,我如何为我的 P.[Score] 取别名?
-
你为什么要给它起别名?它只用在order by子句中,别名没有意义。
标签: sql-server sql-order-by case-statement