2011-03-16 10 views
0

私は2つのテーブルを結合して単純なカウントをしていますが、結合されたキー変数の名前を2つのテーブルに適したものに変更することはできません。 "CUSTOMER_NO"それが使用されているコンテキストで有効です。私はそれがほんの少し構文エラーだと確信していますが、私はそれを見ることができない...SQL構文の問題

SELECT owner_no AS customer_no, 

CASE 
WHEN customer_no BETWEEN 5000 and 5999 THEN 'RENTER' 
WHEN customer_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 

FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 

GROUP BY customer_no 
HAVING COUNT(*) > 1; 

答えて

3

エイリアス化された列名ではなく、CASEおよびGROUP BYで実際の列名を使用します。

CASE 
WHEN owner_no BETWEEN 5000 and 5999 THEN 'RENTER' 
WHEN owner_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 

FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 
GROUP BY owner_no 
HAVING Count(*) > 1; 
+0

@jimconstable:あなたは両方とも正しいです、ありがとうございます。二番目の最小の質問、owner_noとrenter_noに異なる値が含まれている場合、私は内部結合の代わりにunion関数を使うべきですか? – Eric

+0

@Eric、owner_noとrenter_noを結ぶものそれは建物のID、住所、その他のものですか?おそらく、あなたのデータベーススキーマ、サンプルデータ、およびあなたが到達しようとしている結果を示す新しい質問を投稿することができます。あなたがそこに到達するのを手助けすることができます。 –

2

あなたは、クエリの残りをOWNER_NOを使用する必要がありますが、列名ことを確認するためにAS CUSTOMER_NOを残します。

SELECT owner_no AS customer_no, 
CASE 
    WHEN owner_no BETWEEN 5000 and 5999 THEN 'RENTER' 
    WHEN owner_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 
FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 
GROUP BY owner_no 
HAVING COUNT(*) > 1;