我有一个复杂的sql需要解决,这个想法是确定一个特定的CUSTOMER_ID的ADMIN_ID。确定ADMIN_ID的规则如下:多重查询的复杂SQL问题
要确定ADMIN_ID特定帐户,系统应查询从底部 帐户到父,和第一帐户TXT01不为空
它是父母。的ADMIN_ID仅适用于客户群E.
在外壳顶部的帐户有没有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');
这是我code..still做什么,但停留在一些点。在这里欣赏大师可以GV我的手
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
请检查你的老问题。正如有人说,你有一堆已经回答的问题,显然对你有帮助,但你还没有接受过这样的问题。请别做,别人可能不会倾向于帮助你。 –