Oracle SUM函数与FLAG列更新:双表关联计算并更新RESULT1表
CREATE TABLE TABLE2_LINES (NAMES VARCHAR2(12), LINE_NO NUMBER, UNITS NUMBER(18,4), CODE VARCHAR2(4)); INSERT INTO TABLE2_LINES VALUES ('JOHN',1,1,'101'); INSERT INTO TABLE2_LINES VALUES ('JOHN',2,1,'202'); INSERT INTO TABLE2_LINES VALUES ('JOHN',3,1,'180'); INSERT INTO TABLE2_LINES VALUES ('JOHN',4,2,'300'); INSERT INTO TABLE2_LINES VALUES ('RYAN',1,2,'180'); INSERT INTO TABLE2_LINES VALUES ('RYAN',2,1,'180'); INSERT INTO TABLE2_LINES VALUES ('RYAN',3,1,'500'); INSERT INTO TABLE2_LINES VALUES ('OLAN',1,1,'301'); INSERT INTO TABLE2_LINES VALUES ('TONY',1,1,'201'); COMMIT; CREATE TABLE TABLE4_CODES (CD_NM VARCHAR2(12), B_CODE VARCHAR2(4), E_CODE VARCHAR2(4)); INSERT INTO TABLE4_CODES VALUES ('CODELIST','100','101'); INSERT INTO TABLE4_CODES VALUES ('CODELIST','180','180'); INSERT INTO TABLE4_CODES VALUES ('CODELIST','200','219'); INSERT INTO TABLE4_CODES VALUES ('EXCODELIST','180','180'); COMMIT; CREATE TABLE RESULT1 (NAMES VARCHAR2(12), TOT_UNITS NUMBER, FLAG VARCHAR2(2)); COMMIT;
案例说明
- 案例1:JOHN:存在符合条件的代码101、202、180(这些代码存在于TABLE4_CODES表CD_NM为CODELIST的记录中),除180外还有其他符合条件的代码,因此SUM(UNITS)为3,FLAG设为O。
- 案例2:RYAN:仅存在唯一符合条件的代码180(该代码存在于TABLE4_CODES表CD_NM为EXCODELIST的记录中,需查询EXCODELIST而非CODELIST),因此SUM(UNITS)为3,FLAG设为N。
- 案例3:OLAN:无符合条件的代码,无需处理。
- 案例4:TONY:存在符合条件的代码201(该代码存在于TABLE4_CODES表CD_NM为CODELIST的记录中),但无180,因此SUM(UNITS)为1,FLAG设为N。
计算规则
- 若用户拥有多个符合条件的代码且包含180,需先查询TABLE4_CODES表中CD_NM为CODELIST的记录,再进行求和计算(例如JOHN)。
- 若用户拥有单个/多个符合条件的代码但不包含180,需先查询TABLE4_CODES表中CD_NM为CODELIST的记录,再进行求和计算(例如TONY)。
- 若用户仅拥有唯一符合条件的代码180,需先查询TABLE4_CODES表中CD_NM为EXCODELIST的记录,再进行求和计算(例如RYAN)。
预期输出
需将计算结果写入RESULT1表,预期结果如下:
NAMES TOT_UNITS FLAG ----------------------------- JOHN 3 O RYAN 3 N TONY 1 O
内容的提问来源于stack exchange,提问作者Johnbsdk10
相关产品推荐
相关产品推荐

