【发布时间】:2014-03-31 17:18:27
【问题描述】:
我目前正在使用 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 的当前值 IS NOT 在 FINAL_TABLE.FIELD_1 AND TALBE_1.FIELD_2 的当前值 IS NOT in FINAL_TABLE.FIELD_2 THEN 将记录/行插入 FINAL_TABLE
这会导致
Column 1 Column 2 Column 3
1 A i
4 B k
5 C j
第 2 列和第 3 列只有唯一值。
我尝试过使用 LAG 和 PATTERN MATCHING 函数寻找一种从循环转移到 SQL 的方法,但无法弄清楚。 (想不出使用 distinct 的方法)
我还研究了创建可能组合表然后从中进行选择的方法,但这是不可行的,因为只有几千行数据会使组合数量太大,大多数计算机无法处理。
底线:这个逻辑可以通过递归 SQL 查询来实现吗?
【问题讨论】:
-
我认为您必须使用递归 CTE 来实现此逻辑。你用的是 11g 吗?
-
是的,我使用的是 11g。从来没有处理过CTE,打算读一读。有什么建议吗?
-
如果我正确理解问题,此处理需要顺序传递数据。您不妨留下足够好的东西并将代码保留在 VB 中。虽然可以在数据库中完成,但是会失去一些数据库处理的优势。
-
我的问题确实是我从 SQL 查询中得到的数据大约有 400 万条记录,因此在 VB 中执行起来很困难,而且在最终用户 PC 上运行时肯定也很耗时。出于两个原因(容量和时间),我想将此处理抵消给服务器。所以这是一个死胡同吗?