以下是我目前为止的情况:
SELECT seq_emp
,SUBSTR(emp_seq_name,10) emp_name
,seq_data
,emp_data
FROM (SELECT MAX(CASE WHEN rec_type = '100' THEN rec_seq END)
OVER (ORDER BY rec_seq
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) seq_emp
,MAX(CASE
WHEN rec_type = '100'
THEN TO_CHAR(rec_seq,'fm00000000') || '|' || rec_data
END)
OVER (ORDER BY rec_seq
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW) emp_seq_name
,rec_seq seq_data
,rec_type
,rec_data emp_data
FROM mdtest)
WHERE rec_type = '200'
ORDER BY seq_data;
如您所见,我使用的是max reporting分析函数,它有一个窗口,从集合的顶部向下到当前行,以获取当前“200”记录的相关“100”记录;然后在外部查询中,我将丢弃不需要的“100”记录。
为了得到emp_name,我必须将rec_seq与数据附加在一起,以便max函数仍然选择正确的头记录;然后在外部查询中,将rec_seq切掉。
我使用过其他分析函数和语法,包括first_value和keep语法,但这两种语法都不能简化这项工作;困难在于窗口是由rec_type的值定义的,而不是一些常量偏移量。