简体   繁体   中英

How to fix incorrect syntax near keyword 'ORDER'

I've got the following SQL and it's giving me Incorrect syntax near keyword 'ORDER' when I try to execute it:

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

How should I fix it?

UPDATE:

Here's what I'm actually trying to accomplish. I have a SPROC that is generating the query dynamically based on a bunch of different conditions. It also builds a temp table that contains ID's and weights associated with those id's so I would like the results sorted by that. Once the query is generated, I would like to get the count as well as the id's found returned in a list.

In a union you can only order the full result, not the partial ones because ordering a sub-select doesn't make sense - it's a relation/table and they are (by definition) not sorted.

If you want the overal result to be ordered you can add an ORDER BY 1 ASC to sort by the first (and only) column. If you want all rows from the first part to come before the second and sort the second one by weight, you can do the following:

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

This assumes that the values for x.weight are greater than zero. If they aren't you need to use a different (lower) value in the first part of the union.

If you move the ORDER BY to the first SELECT in your UNION, it will order the entire set of results. It has to be on the first SELECT, though, and anywhere else will result in the error you're seeing.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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