2011-02-26 27 views
0

2つのテーブルの値を比較するために、次のクエリを使用しています。 SUM(u.val)は総支払い額であり、その値を請求書(r.p_val)の値と比較し、SUM値が低いもののみを一覧に表示したいと考えています。テーブル内の値を比較する

「『where句』内の不明な列 『total_val』」私はエラーを取得このクエリでは

SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
WHERE total_val < r.p_val 
GROUP BY u.nmb 

は、私が唯一の個々の値ではなく、総支払を比較して、クエリで結果を得ることができました。クエリは次のようになります。

SELECT u.nmb, u.val, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
WHERE u.val < r.p_val 
GROUP BY u.nmb 

類似のクエリを実行して必要な結果を得る手段はありますか?

ありがとうございます。

答えて

2

変更する場所を変更してください。あなたはWHERE句で列の別名を使用することはできません

SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb 
GROUP BY u.nmb 
HAVING SUM(u.val) < r.p_val 
+0

ありがとうございました。このクエリは、私が必要とするものを正確に行います。私がテーブル "inv"に何も支払い(記録)のないリストとその請求書を掲載したいのであれば、どうすればいいですか? – Sergio

+0

INNER JOINをLEFT JOINに変更する – agsamek

+0

これを試しましたが、LEFT JOINを使用したクエリは、請求書のテーブル "inv"にレコードがある場合にのみ機能します。その請求書の記録がなければ、請求書は記載されません。 – Sergio

0

:WHERE集計BY選択リストにもGROUPに定義された列にアクセスすることはできません。元のクエリでtotal_valをSUM(u.val)に置き換えると正常に動作するはずです。

1
SELECT u.nmb, SUM(u.val) AS total_val,r.p_val 
FROM inv u 
INNER JOIN bills r ON r.nmb = u.nmb   
GROUP BY u.nmb 
HAVING total_val < r.p_val 
関連する問題