SQL查询:在UNION中排序

dar*_*age 4 sql union sql-order-by

我在使用UNION查询的SQL Server 2005(Express版)时遇到了一些问题.

我有以下列的这个表订单:OrdNr,Prio现在我想通过2种方式按订单排序,第一种方式是紧急订单(所以prio 6或16)和第二种方式,其余订单按Prio排序.

所以这就是我的表格:

ORDNR  PRIO
1       6
2       16
3       2
4       8
Run Code Online (Sandbox Code Playgroud)

我想要的是这个:

ORDNR  PRIO
2       16
1       6
4       8
3       2
Run Code Online (Sandbox Code Playgroud)

我的查询尝试是这样的:

SELECT OrdNbr, Prio 
FROM Orders
WHERE Prio IN (6,16) 
ORDER BY Prio DESC
UNION
SELECT OrdNbr, Prio 
FROM Orders
WHERE Prio NOT IN (6,16) 
ORDER BY Prio DESC
Run Code Online (Sandbox Code Playgroud)

但我从SQL得到一个错误:UNION附近的语法错误

请帮忙:D

ain*_*ain 6

SELECT OrdNbr, Prio 
  FROM Orders
ORDER BY
  CASE Prio 
    WHEN 16 THEN 0 
    WHEN 6 THEN 1
    ELSE 2 END,  
  Prio DESC
Run Code Online (Sandbox Code Playgroud)

  • @darkownage - 您可以在子查询中执行`distinct`.`SELECT OrdNbr,Prio FROM(SELECT DISTINCT OrdNbr,Prio FROM Orders)作为O ORDER BY CASE Prio当16那么0当6那么1结束时,Prio DESC` (2认同)