在ORACLE上使用递归CTE创建多列过滤



我目前正在使用VBA函数来循环Oracle结果集,以消除多个列/字段上的重复项(即每列中只有不同的值),例如:

我的结果集是按RECORD_ID排序的,我想消除FIELD_1和FIELD_2重复:

RECORD_ID   FIELD_1     FIELD_D
1           A           i
2           A           j
3           B           i
4           B           k
5           C           j
6           C           k
7           D           k

因此,我的程序创建了一个新表(例如FINAL_TABLE)并计算原始sql结果集(例如TABLE_1)中的每一行:

IF TALBE_1的当前值。FIELD_1 在FINAL_TABLE中不。FIELD_1 AND TALBE_1的当前值。FIELD_2 在FINAL_TABLE中不。FIELD_2 THEN insert record/row into FINAL_TABLE

结果是

Column 1    Column 2    Column 3
1           A           i
4           B           k
5           C           j

其中只有列2和列3上的唯一值。

我试着寻找一种方法,从循环到SQL与LAG和模式匹配功能,但不能弄清楚。(想不出如何使用distinct)

我还研究了一些方法,这些方法创建了一个可能的组合表,然后从中进行选择,但这是不可行的,因为只有几千行数据会使组合的数量对大多数计算机来说太大而无法处理。

底线:这个逻辑可以通过递归SQL查询实现吗?

如果您将结果集存储在临时表中,那么我认为您可以使用delete:

delete from temp
    where exists (select 1
                  from temp t2
                  where t2.id < temp.id and (t2.col2 = temp.col2 or t2.col3 = temp.col3)
                 );

最新更新