私はクエリを書くことに少し困惑しています (SQL は私の得意分野ではありません)。
私は次のものを持っているとしましょうTABLE1:
CODE NAME SCOPE1 SCOPE2 SEQ
------------------------------------
A a Here 1
B b Here 2
C c Here 3
C c Room 1
A aa Room 2
B bbb Room 3
ビジネス キーはCODE + SCOPE1 + SCOPE2であり、SCOPE1とSCOPE2は常に相互に排他的です。
、、 でソートする必要がある場合、CODEとの明確な結果を得るにはどうすればよいですか?NAMESCOPE1SCOPE2SEQ
つまり、 と が与えられた場合、次の結果を得たいと思いますSCOPE1 = 'Here'。SCOPE2 = 'Room'
CODE NAME
---------
A a
B b
C c
A aa
B bbb
注: C cfromはfromRoomと重複しているため不要です。C cHere
DISTINCTwithを使用することの制限を認識してORDER BYおり、私が思いつくことができる最高のものは次のとおりです。
select distinct CODE, NAME from
(
select CODE, NAME from MYTABLE
where (SCOPE1='Here' or SCOPE2='Room')
order by SCOPE1, SCOPE2, SEQ
);
上記は正しいペアを生成しますが、順序が間違っています。をいじってみましGROUP BYたが、よくわからなかったようです。
私は標準 SQL に固執する必要があります (つまり、おそらく Oracle でない限り、製品固有の SQL 構造はありません)。この特定のクエリでは、サブセレクトを回避することはおそらく不可能だと思います。
任意のポインタに非常に感謝します。前もって感謝します。
更新:データ セットを更新しました。peterm の回答に基づいて、これまでに持っているものは次のとおりです: sqlfiddle。シーケンスの微調整を開始すると、MIN/MAX トリックがうまく機能しません。
前提として、私は常に特定の 1 つとSCOPE1ペアになっている特定の 1 つを検索しSCOPE2ます。しかし、すべてのSCOPE1レコードが の前に表示される必要がありますSCOPE2。CODE + NAMEアイデアは、私がどちらから来ているSCOPE1かは気にしないということですSCOPE2-私は、、、およびによってソートされた一意のペアがSCOPE1必要SCOPE2ですSEQ。