0

次のデータがあります。

Aapple mango wood
Bpine tea orange
Bnuts blots match
Ajust another record

ここで、別の「A」レコードまたは非「B」レコードが検出されるまで、「A」で始まるすべてのレコードを「B」で始まるレコードに関連付けたいと考えています。たとえば、上記のデータから、次のデータ (2 レコード) を取得したいと思います。

mango tea
mango blots

A レコードに続く B レコードの数は可変です。つまり、(A レコードの後に​​任意の数の B レコードが続く場合があります (以下のデータでは 3 つ)。

Aapple mango wood
Bpine tea orange
Bnuts blots match
Basdf asdf  asdf
Ajust another record

したがって、結果の出力は次のようになります

mango tea
mango blots
mango asdf

SQLローダーを使用して上記を行うことは可能ですか?. ヘルプ/ポインタは大歓迎です。

編集:句を使用することを考えてCONTINUEIFいましたが、以前に取得したレコードを削除する方法がないようです。たとえば、私が使用する場合、

CONTINUEIF NEXT PRESERVE(1)='B'

「マンゴーティーブロットasdf」を一度に取得しますが、取得しません

"mango|tea"
"mango|blots"
"mango|asdf"
4

1 に答える 1

1

レコード タイプ識別子に基づいて、レコードを 2 つの別々のテーブルにロードすると思います

recnum を使用して順序を保持します

参照: http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch06.htm

その後、SQLでデータを変換できます

SELECT 
    a.text,
    b.text,
    a.id,
    a.nxtid 
FROM 
(
    SELECT text,id, NVL(LEAD(seq,1) OVER (ORDER BY id),999999) AS NXTID
    FROM t1
) a
LEFT JOIN t2 B ON b.seq > a.id AND b.id < a.nxtid 
于 2011-09-12T15:04:32.283 に答える