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 loader 执行上述操作?任何帮助/指针都将受到欢迎。

编辑:我在考虑使用CONTINUEIF子句,但似乎没有办法消除之前检索到的记录。例如,如果我使用,

CONTINUEIF NEXT PRESERVE(1)='B'

我会一口气得到“芒果茶印迹 asdf”,而不是

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

1 回答 1

1

我想我会根据记录类型标识符将记录加载到 2 个单独的表中,请参阅:http: //download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005614

并使用 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 回答