2009-06-27 8 views
1

私はさんOrdIDテーブルを指定していないというエラーになっています:MS Access HWクエリーのどこかに明白なエラーがありませんか?

は、ここで私が持っているものです。

SELECT Last, OrderLine.OrdID, OrdDate, SUM(Price*Qty) 
    FROM ((Cus INNER JOIN Orders ON Cus.CID=Orders.CID) 
     INNER JOIN OrderLine 
      ON Orders.OrdID=OrderLine.OrdID) 
     INNER JOIN ProdFabric 
      ON OrderLine.PrID=ProdFabric.PrID 
      AND OrderLine.Fabric=ProdFabric.Fabric 
    GROUP BY Last 
    ORDER BY Last DESC, OrdID DESC; 

私は実行を打ったとき、それはOrdIDは以上のものを指すことができると言って続けて1つのテーブルはFROM句にリストされています。

OrdIDのために選択するテーブルを指定したので、なぜそれが言い続けていますか?

テーブル:

Cus (**CID**, Last, First, Phone) 
Orders (**OrdID**, OrdDate, ShipDate, CID) 
Manu (**ManuID**, Name, Phone, City) 
Prods (**PrID**, ManuID, Category) 
ProdFabric (**PrID**, **Fabric**, Price) 
Orderline (**OrdId**, **PrID**, Fabric, Qty) 

答えて

1

ORDER BY句を使用すると、SELECTリストで指定したものにとらわれません。たとえば、出力選択リストに実際には含まれていないフィールドで注文することができます。

したがって、Order byリストのフィールドが曖昧でないことを確認する必要があります。

+0

ああ、お見逃しでした。私はそれを修正しましたが、今は次のようになっています: "集計関数の一部として指定された式 'OrdID'を含まないクエリを実行しようとしました。 –

+0

ありがとうございました。 –

2

ORDER BY句は、有効なSQL-92構文です。

悲しいことに、AccessデータベースエンジンはSQL-92に準拠していません。 SELECT句の列相関名( 'alias')は使用できません。これを使用した場合は、

SUM(Price * Qty) AS total_price 
... 
ORDER BY total_price 

と表示されます。

相関名の代わりに、アクセス・データ・エンジンは列名または式のいずれかを期待しています(後者はSQL-92では無効です)。指定された列はSELECT節に現れる必要はありません(SQL-92ではやはり不正です)。 FROM句の任意のテーブルからのカラムを使用できるため、テーブル名を使用してそれらの曖昧さを解消する必要があります。 FROM句でテーブルの相関名を使用した場合は、ORDER BY句で使用する必要があります(私はルールを作成しません)

Accessデータベースエンジンの要件を満たすためには、ORDERこれまでBY句:

ORDER BY Last DESC, OrderLine.OrdID DESC; 

さておき、私は(私は完全なテーブル名を使用して見つけ、あなたのSELECT句でテーブル名とあなたの列を修飾する場合は、あなたのコードは、彼らが文脈で明確な場合であっても、より読みやすいことだと思うとデータディクショナリで指定され、すべてのクエリで一貫して使用される)。それが立っているから、私はOrdDateOrdersであり、PriceQtyOrderLineであると推測できます。 Lastが何であるかわからない。

関連する問題