私はクエリを書くことに少し困惑しています (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
との明確な結果を得るにはどうすればよいですか?NAME
SCOPE1
SCOPE2
SEQ
つまり、 と が与えられた場合、次の結果を得たいと思いますSCOPE1 = 'Here'
。SCOPE2 = 'Room'
CODE NAME
---------
A a
B b
C c
A aa
B bbb
注: C c
fromはfromRoom
と重複しているため不要です。C c
Here
DISTINCT
withを使用することの制限を認識して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
。