我在使用UNION查询的SQL Server 2005(Express版)时遇到了一些问题。
我有这个表订单包含以下列:OrdNr,Prio 现在我想以2种方式通过订单订购,第一种方式是紧急订单(所以prio 6或16),第二种方式,其余订单按Prio排序。
所以这就是我的表格:
ORDNR PRIO
1 6
2 16
3 2
4 8
我想要的是:
ORDNR PRIO
2 16
1 6
4 8
3 2
我的查询尝试是:
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
但我从SQL收到错误:UNION附近的语法错误
请帮助:D
答案 0 :(得分:6)
SELECT OrdNbr, Prio
FROM Orders
ORDER BY
CASE Prio
WHEN 16 THEN 0
WHEN 6 THEN 1
ELSE 2 END,
Prio DESC
答案 1 :(得分:2)
我认为你需要这个
SELECT OrdNbr, Prio
FROM Orders
WHERE Prio IN (6,16)
UNION
SELECT OrdNbr, Prio
FROM Orders
WHERE Prio NOT IN (6,16)
ORDER BY Prio DESC
==编辑== 如果您的Prio字段是整数,我认为以下将起作用
select * from (
SELECT OrdNbr,Prio
FROM Orders
WHERE Prio IN (6,16)
UNION
SELECT OrdNbr, Prio
FROM Orders
WHERE Prio NOT IN (6,16)
)
ORDER BY Prio DESC
答案 2 :(得分:1)
最简单的方法(如果你不介意添加另一个输出列)是:
SELECT OrdNbr, Prio, 1 AS Seq
FROM Orders
WHERE Prio IN (6,16)
UNION
SELECT OrdNbr, Prio, 2 AS Seq
FROM Orders
WHERE Prio NOT IN (6,16)
ORDER BY Seq, Prio DESC;
答案 3 :(得分:0)
试试这个:
SELECT OrdNbr, Prio
FROM
(
SELECT OrdNbr, Prio,
CASE WHEN Prio IN (6,16) THEN 0 ELSE 1 END ord
FROM Orders
) t
ORDER BY ord, Prio;
答案 4 :(得分:0)
SELECT ordnbr,
PRIO,
CASE prio
当16那么1
当6那么2
ELSE 3
结束为NewPriority
来自订单
按新优先顺序排序,
prio DESC
根据要求,16和6得到前2个优先级,其余订单应根据Prio排序
只有你会看到一个额外的列(NewPriority),它可以在你的应用程序中显示时被屏蔽。
另外一个提示是,如果基于此构建应用程序,Ordernumber(OrdNbr)应该是唯一的。