繁体   English   中英

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

[英]How to fix incorrect syntax near keyword 'ORDER'

我有以下SQL,当我尝试执行它时,它Incorrect syntax near keyword 'ORDER'给了我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上,其他任何地方都将导致您看到的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM