如何修复关键字'ORDER'附近的错误语法



我有以下SQL,当我尝试执行它时,它会给我Incorrect syntax near keyword 'ORDER'

SELECT COUNT(*) AS ID 
FROM Employees i
  INNER JOIN #WeightedIDs w
  ON (i.ID = w.ID)
WHERE (i.DepartmentID = 10 and i.ShiftID = 2)
UNION ALL
SELECT i.ID FROM Employees i
  INNER JOIN #WeightedIDs w
  ON (i.ID = w.ID)
WHERE (i.DepartmentID = 10 and i.ShiftID = 2)
ORDER BY w.[Weight] ASC

我该怎么修?

更新:

以下是我真正想要实现的目标。我有一个SPROC,它根据一堆不同的条件动态生成查询。它还构建了一个临时表,其中包含ID和与这些ID相关的权重,所以我希望结果按此排序。生成查询后,我希望在列表中返回计数以及找到的id。

在并集中,您只能对全部结果排序,而不能对部分结果排序,因为对子选择排序没有意义——这是一个关系/表,它们(根据定义)没有排序。

如果希望对整个结果进行排序,可以添加一个ORDER BY 1 ASC以按第一列(也是唯一一列)排序。如果你想让第一部分的所有行都在第二部分之前,并按重量对第二部分进行排序,你可以做以下操作:

select id
from
(
  SELECT COUNT(*) AS ID, 
         0 as sort_column
  FROM Employees i
    INNER JOIN #WeightedIDs w
    ON (i.ID = w.ID)
  WHERE (i.DepartmentID = 10 and i.ShiftID = 2)
  UNION ALL
  SELECT i.ID, 
         x.[Weight] 
  FROM Employees i
    INNER JOIN #WeightedIDs w
    ON (i.ID = w.ID)
  WHERE (i.DepartmentID = 10 and i.ShiftID = 2)
) x
order by sort_column

这假设x.weight的值大于零。如果不是,则需要在并集的第一部分中使用不同的(较低的)值。

如果将ORDER BY移动到UNION中的第一个SELECT,它将对整个结果集进行排序。不过,它必须在第一个SELECT上,而其他任何地方都会导致您看到的错误。

最新更新