0

我有一个相当复杂的查询,可以在 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

此查询失败的任何明显原因?

4

2 回答 2

3

您必须为派生表输出/子查询输出提供别名。否则,您将遇到错误。

话虽如此,我相信这个查询可以用更好的方式编写。

正确版本:在子句前注意T1 。ORDER BY我给了一个简单的名字,但你可以随意命名。建议使用有意义的名称而不是 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
于 2012-05-02T19:17:17.350 回答
1

您缺少外部派生表的别名:

改变这个:

        WHERE   o.order_status = 10 
    ) 
ORDER BY ship_priority DESC

进入这个:

        WHERE   o.order_status = 10 
    ) as derivedTable
ORDER BY ship_priority DESC
于 2012-05-02T19:18:48.563 回答