输入表:
agent_id transaction_code date state_code
12345233 LARA 20230509 FL
12345233 LOBA 20230509 FL
45678342 LARA 20230509 AL
45678342 LOBA 20230509 AL
45678342 LOBA 20230509 AL
68939393 LOBA 20230509 AL
74953738 LOBA 20230509 GA
68939393 LARA 20230509 FL
68939393 LOBA 20230509 FL
68939393 LOBA 20230509 FL
预期输出表:
agent_id transaction_code date state_code
68939393 LOBA 20230509 AL
74953738 LOBA 20230509 GA
电流输出表:
agent_id transaction_code date state_code
12345233 LOBA 20230509 FL
45678342 LOBA 20230509 AL
45678342 LOBA 20230509 AL
68939393 LOBA 20230509 AL
74953738 LOBA 20230509 GA
68939393 LOBA 20230509 FL
68939393 LOBA 20230509 FL
我只希望输入表中有两行只有该代理ID的LOBA事务代码,而没有LARA事务代码,但是通过查询,我得到了所有的LOBA事务。
SELECT DISTINCT SUBSTR(A.RECORD_KEY,1,10) AS "PRODUCER_TAX_ID",
CASE WHEN B.SEX_CODE = 'E'THEN TRIM(B.CORPORATE_NAME) ELSE TRIM(B.FIRST_NAME) || TRIM(B.MIDDLE_NAME) || TRIM(B.LAST_NAME) END AS "PRODUCER_NAME",
SUBSTR(A.RECORD_KEY,11,2) AS "STATE_CODE", SUBSTR(A.RECORD_AREA,29,8) AS "APPOINTMENT_EFFECTIVE_DATE", A.ORIGINATOR_CD AS "USER_ID",
DECODE(A.FILE_MAINT_TRX_CD ,'LOBA','ADD') AS "TRANSACTION_TYPE",
SUBSTR(A.RECORD_AREA,134,1) AS "SEND_TO_STATE", A.LOG_DT_R AS "LAST_CHANGED_DT" , A.LOG_TIME AS "TIME_PROCESSED"
FROM PPL_S01.REG_HIST A , PPL_S01.MPR B
WHERE SUBSTR(A.RECORD_KEY,1,10) NOT IN (select DISTINCT SUBSTR(A.RECORD_KEY,1,10)
from PPL_S01.REG_HIST R
where A.FILE_MAINT_TRX_CD = 'LARA' AND SUBSTR(R.RECORD_KEY,1,10) = SUBSTR(A.RECORD_KEY,1,10))
AND A.FILE_MAINT_TRX_CD = 'LOBA'
AND B.MSTR_AGENT_ID = SUBSTR(A.RECORD_KEY,1,10)
2条答案
按热度按时间s4chpxco1#
我假设您正在尝试获取LOBA记录,而该记录中没有同一代理的LARA代码记录?如果是这种情况,则应执行以下操作:
dgtucam12#
您似乎想要只具有LOBA事务的代理行。如果是这样,你可以使用窗口函数来标记那些不满足要求的代理,然后过滤掉它们:
相反,如果我们正在查找没有LARA事务的代理行,则需要将条件表达式更改为:
与使用子查询或连接的解决方案相反,窗口函数方法的结果是查询只扫描表一次,因此通常更有效。
PS:您当前的查询似乎与您的数据无关。