【发布时间】:2017-01-14 19:31:21
【问题描述】:
我正在尝试学习 Oracle 12c 引入的模式匹配。但是得到 ORA-00918: column ambiguously defined 从下面的代码。不知道哪里漏掉了
SELECT CUSTOMER_ID,ORDER_TOTAL,ORDER_TIMESTAMP FROM DEMO_ORDERS MATCH_RECOGNIZE(
PARTITION BY CUSTOMER_ID
ORDER BY CUSTOMER_ID,ORDER_TIMESTAMP
MEASURES
A.CUSTOMER_ID AS CUSTOMER,
A.ORDER_TOTAL AS TOTAL_AMT,
A.ORDER_TIMESTAMP AS WHEN_HPA
ALL ROWS PER MATCH
PATTERN( A B* )
DEFINE
B AS (B.ORDER_TOTAL < PREV(B.ORDER_TOTAL))
)
【问题讨论】:
-
这段代码还有一些其他问题(除了 Alex 已经指出的问题)。在 MEASURES 中,您仅包含 A.CUSTOMER_ID 等,但您返回 ALL ROWS PER MATCH。如果要为每一行返回各自的值,不要测量 A.CUSTOMER_ID,测量 CUSTOMER_ID。然后,在 SELECT 中使用来自 MEASURES 的列别名。 (您使用了基表中的原始列名,这也很好,因为在 MEASURES 中您没有定义任何新表达式,您只是重命名了现有列)。如果您只想返回现有列,则根本不需要包含 MEASURES!