2012-05-02 26 views
0

AccessとMySQLでは正常に動作するかなり複雑なクエリがありますが、MS SQLでは動作しません。 「キーワード 'ORDER'の近くに構文が正しくない」というメッセージが表示されます。このクエリの目的は、最初に迅速な出荷(「USPS Express」)を使用して上位100件の注文を取得することです。このサブクエリが失敗するのはなぜですか?

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 

このクエリが失敗する明白な理由はありますか?

+1

インナーTOPはありません。対応するORDER BY句正確にどのTOP100行が期待していますか? –

+0

私は、なぜ彼らが使用しているSQL Serverのバージョンがそのような守られた秘密であるべきだと人々が思うのか分かりません。それはしばしばソリューションの重要な部分です。 –

+0

良いキャッチアロン、私はそれが属している外側の選択にTOP 100を移動 – rhall

答えて

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 
+0

優秀、派生テーブルの名前を追加して、完璧に、感謝しました! – rhall

1

あなたは、外側派生テーブルの別名が欠落している:

変更をこの:この中へ

 WHERE o.order_status = 10 
    ) 
ORDER BY ship_priority DESC 

 WHERE o.order_status = 10 
    ) as derivedTable 
ORDER BY ship_priority DESC 
関連する問題