【发布时间】:2021-02-25 11:36:22
【问题描述】:
给定以下数据结构:
CREATE TABLE ETL_TEST
(
CASE_NO NUMBER(10,0),
LINE_NO NUMBER(10,0),
COLUMN_NAME VARCHAR2(18),
CHANGE_DATE DATE,
NEW_ENTRY VARCHAR2(255),
OLD_ENTRY VARCHAR2(255),
CONSTRAINT CASE_PK
PRIMARY KEY (CASE_NO, LINE_NO, COLUMN_NAME)
);
测试数据在这里http://sqlfiddle.com/#!4/2f718c/1
对于每组 CASE_NO 和 LINO_NO,如果 COLUMN_NAME = 'REASON_TEXT',则必须创建包含 CASE_NO、LINE_NO 和 REASON_TEXT 列的聚合行,其中 REASON_TEXT 包含 NEW_ENTRY 的数据。
如果 COLUMN_NAME = 'REASON_TEXT' 为 null 或没有 COLUMN_NAME = 'REASON_TEXT' 则必须选择前一个 LINO_NO 的数据,其中 COLUMN_NAME = 'REASON_TEXT' (如果存在这样的条目)。
这张图应该能说明问题
我想知道这是否可以使用纯 Oracle SQL 来实现。我会知道谁在 PL/SQL 中解决这个问题,但是使用纯 SQL?挑战在于没有固定数量的 COLUMN_NAME = 'REASON_TEXT',因为它可以是零个或多个。
【问题讨论】:
标签: sql oracle plsql aggregate-functions