2011-09-21 19 views
1

週1または週2、または両方が選択可能なクエリを取得していて、週1の結果のみを表示する方法を見つけ出す必要がありますが、どちらに利用できるかを知る必要があります週。 SQLクエリの問題(Oracle)

は、ここでこれは、次のような結果

week location 
46  VH209A 
46  VH209B 
46  VH20B 
46  VH20C 
47  VH209B 
47  VH20A 
47  VH20C 

私は、これらの結果

week location 
46  VH209A 
46  VH209B 
46  VH20B 
46  VH20C 

を表示したい私に与え

select * 
from table1 t1 
where t1.location = 'VH' 
and (t1.week = '46' or t1.week = '47'); 

説明するのに役立つ可能性がある私のクエリだが、私は知りたいです次の週のレコード、つまりこれらのレコードも利用可能です。

week  location 
47  VH209B 
47  VH20C 

だから私の望ましい結果は、これは理にかなって

week  location 2weeks 
46  VH209A  N 
46  VH209B  Y 
46  VH20B   N 
46  VH20C   Y 

希望のようなものでしょうか?

どのようにすれば結果が得られますか?

答えて

2
SELECT 
    t1.week 
    , t1.location 
    , CASE WHEN t2.location is not null THEN 'Y' 
     ELSE 'N' 
    END AS hasmore 
FROM table1 t1 
LEFT JOIN (SELECT DISTINCT location FROM table1 WHERE week = '47') t2 
    ON (t1.location = t2.location) 
WHERE t1.location = 'VH' 
    AND t1.week = '46'; 
+0

おかげでJOINSが、私は 'ビット –

+0

when''ケースを置き、 '(t2.locationがnullではない)で'欠落している右parenthesis'のエラーを取得しているようだについてもっと読みます代わりに – Johan

+1

ブリリアント - ありがとう:) –

0

あなたはINNER JOINを使用すると考えましたか? LEFTまたはRIGHT JOIN?これにより、同じデータでテーブルに接続されている他のテーブルのデータにアクセスすることができます。

あなたのデータベース構造についてはわかりませんが、いくつかのデータをいくつかの表に分けています。これで私はそれらの結合でクエリを実行します。

あなたはいくつかのテーブルにデータを区切る場合の例

select * from table1 LEFT JOIN table2.withdatajoinedtotable1 ON table2.week = table1.week WHERE table2.2weeks = 'Y' 

について、あなたはJOINSでそれらにアクセスすることができます。

これが役に立ちます。

答えをSQL JOINS