Мне нужно решить сложный sql, идея состоит в том, чтобы определить ADMIN_ID для конкретного CUSTOMER_ID.Правило определения ADMIN_ID приведено ниже:
Чтобы определить ADMIN_ID для конкретной учетной записи, система должна запросить учетную запись снизу вверх к родительской, а первую учетную запись - с TXT01.не является нулевым
это родитель.
ADMIN_ID применим только к КЛИЕНТУ группы E.
В случае, если у учетной записи Top естьОтсутствие TXT01, должно выдать предупреждение
Только CUSTOMER_ID = PAYING_ACCOUNT_ID необходимо проанализировать
Таблица счетов
CUSTOMER_ID PAYING_ACCOUNT_ID PARENT_ACCOUNT_ID
3271516 3271516 719216
1819276 1819276 810546
719216 719216 719216
810546 810546 810547
810547 810547 810547
999999 111111 111111
111111 111111 111111
123456 123456 231
231 231 231
Таблица клиентов
CUSTOMER_ID TXT01
719216 TOM
810546 NULL
810547 JIM
3271516 NULL
1819276 NULL
999999 NULL
111111 BEN
123456 NULL
231 NULL
Группа клиентов
CUSTOMER_ID GROUP
719216 E
810546 E
810547 E
3271516 E
1819276 E
999999 E
111111 E
123456 E
231 E
888 A
Выход
CUSTOMER_ID PAYING_ACCOUNT_ID PARENT_ACCOUNT_ID ADMIN_ID
3271516 3271516 719216 TOM
1819276 1819276 810546 JIM
719216 719216 719216 TOM
810546 810546 810547 JIM
810547 810547 810547 JIM
111111 111111 111111 BEN
123456 123456 231 Warning!!
231 231 532 Warning!!
DDL
CREATE TABLE ACCOUNT (CUSTOMER_ID NUMBER(20) NOT NULL,
PAYING_ACCOUNT_ID NUMBER(20),
PARENT_ACCOUNT_ID NUMBER(20));
CREATE TABLE CUSTOMER (CUSTOMER_ID NUMBER(20) NOT NULL,
TXT01 VARCHAR2(20));
CREATE TABLE CUSTOMER_GROUP (CUSTOMER_ID NUMBER(20) NOT NULL,
GROUP VARCHAR2(20));
INSERT INTO ACCOUNT VALUES (3271516,3271516,719216);
INSERT INTO ACCOUNT VALUES (1819276,1819276,810546);
INSERT INTO ACCOUNT VALUES (719216,719216,719216);
INSERT INTO ACCOUNT VALUES (810546,810546,810547);
INSERT INTO ACCOUNT VALUES (810547,810547,810547);
INSERT INTO ACCOUNT VALUES (999999,111111,111111);
INSERT INTO ACCOUNT VALUES (111111,111111,111111);
INSERT INTO ACCOUNT VALUES (123456,123456,231);
INSERT INTO ACCOUNT VALUES (231,231,231);
INSERT INTO CUSTOMER VALUES (719216,'TOM');
INSERT INTO CUSTOMER VALUES (810546,NULL);
INSERT INTO CUSTOMER VALUES (810547,'JIM');
INSERT INTO CUSTOMER VALUES (3271516,NULL);
INSERT INTO CUSTOMER VALUES (1819276,NULL);
INSERT INTO CUSTOMER VALUES (999999,NULL);
INSERT INTO CUSTOMER VALUES (111111,'BEN');
INSERT INTO CUSTOMER VALUES (123456,NULL);
INSERT INTO CUSTOMER VALUES (231,NULL);
INSERT INTO CUSTOMER_GROUP VALUES (719216,'E');
INSERT INTO CUSTOMER_GROUP VALUES (810546,E);
INSERT INTO CUSTOMER_GROUP VALUES (810547,'E');
INSERT INTO CUSTOMER_GROUP VALUES (3271516,'E');
INSERT INTO CUSTOMER_GROUP VALUES (1819276,'E');
INSERT INTO CUSTOMER_GROUP VALUES (999999,'E');
INSERT INTO CUSTOMER_GROUP VALUES (111111,'E');
INSERT INTO CUSTOMER_GROUP VALUES (123456,'E');
INSERT INTO CUSTOMER_GROUP VALUES (231,'E');
INSERT INTO CUSTOMER_GROUP VALUES (888,'A');
Это мой код ... все еще работает, но застрял в какой-то момент.Цените гуру здесь можете подать мне руку
WITH myData AS (
SELECT CUSTOMER_ID, TXT01 FROM CUSTOMER WHERE CUSTOMER_ID IN
(SELECT CUSTOMER_ID from CUSTOMER_GROUP WHERE GROUP = 'E')
)
SELECT v.*
FROM
(SELECT m.* ,
CASE WHEN TXT01 IS NOT NULL THEN TXT01
ELSE ( *STUCK HERE*
END ADMIN_ID
FROM myData m) v