ステートメントでUNION
句を使用する方法実行順序をどのように保証できますか?たとえば :この場合ORACLE SQL UNION句を実装する方法は、各SELECTの順序を維持する方法
SELECT a.poclcdde, a.poclnpol, a.poclcdcl
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLCDCE = 0
AND POCLTPSG = '01'
UNION
SELECT a.poclcdde, a.poclnpol, a.poclcdcl
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLTPSG = '02'
POCLCDDE POCLNPOL POCLCDCL
---------- ---------- ----------
100 1000001 202153
100 5001021 216450
100 9000386 8078
100 9900633 250056
100 9900634 250056
100 9901720 562223
100 9901763 562223
200 1000001 202153
200 5001021 216450
、私は最初のレコードはQuery1をし、残りの部分からであることを保証するにはどうすればよいがQUERY2からです。 poclcdcl
列(または仮想列)を使用してそれを注文することができますが、この場合はDISTINCT
行を取得する必要があります。
SELECT *
FROM (SELECT a.poclcdde,
a.poclnpol,
a.poclcdcl,
1 AS TYPE
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLCDCE = 0
AND POCLTPSG = '01'
UNION
SELECT a.poclcdde,
a.poclnpol,
a.poclcdcl,
2 AS TYPE
FROM dtpocl a
WHERE a.poclcdcl IN (216450,
562223,
250056,
202153,
8078)
AND POCLTPSG = '02')
ORDER BY TYPE
POCLCDDE POCLNPOL POCLCDCL TYPE
---------- ---------- ---------- ----------
200 1000001 202153 1
100 1000001 202153 1
100 9000386 8078 1
100 9900634 250056 2
100 9901720 562223 2
100 9901763 562223 2
200 5001021 216450 2
100 9000386 8078 2
100 5001021 216450 2
100 9900633 250056 2
この順番で各行をやり取りするには、最初のクエリが優先されます。 ありがとうございますが、これを行うことができ
UNIONは重複を削除するため、できません。 – jarlh
OK ... UNIONを使わずに?何か方法はありますか? – milheiros
UNION ALLを実行できます。最初の選択に「1」を追加し、2番目に「2」を追加します。その列で注文する。 – jarlh