我有一个相当复杂的查询,可以在Access和MySQL中正常工作,但在MS SQL中不起作用。收到消息“关键字'ORDER'附近的语法不正确”。查询的目标是获得前100个订单,加快发货('USPS Express')。
SELECT *
FROM ( SELECT
TOP 100 o.orderid
, (
select 1
from orders
where orderid = o.orderid
and oshipmethod = 'USPS Express'
) as ship_priority
FROM orders o
WHERE o.order_status = 10
)
ORDER BY ship_priority DESC
此查询失败的任何明显原因?
答案 0 :(得分:3)
您必须为派生表输出/子查询输出提供别名。否则,您将遇到错误。
话虽如此,我相信这个查询可以用更好的方式编写。
正确版本:在ORDER BY
子句之前注意 T1 。我给了一个简单的名字,但你可以根据自己的意愿命名。而不是T1,建议使用有意义的名称。
SELECT *
FROM ( SELECT
TOP 100 o.orderid
, (
select 1
from orders
where orderid = o.orderid
and oshipmethod = 'USPS Express'
) as ship_priority
FROM orders o
WHERE o.order_status = 10
) T1
ORDER BY ship_priority DESC
答案 1 :(得分:1)
您缺少外部派生表的别名:
改变这个:
WHERE o.order_status = 10
)
ORDER BY ship_priority DESC
进入这个:
WHERE o.order_status = 10
) as derivedTable
ORDER BY ship_priority DESC