SELECT A.ACCTNBR AS AccountNumber, COALESCE(Y.AGREENBR,Z.AGREENBR) AS AgreeNumber, CAST(TRIM(COALESCE(Y.USERID,Z.USERID,CASE WHEN A.MEMBERAGREENBR IS NULL THEN NULL ELSE 'M'||A.MEMBERAGREENBR END)) AS VARCHAR2(32)) AS UserId FROM OSIBANK.ACCT A LEFT JOIN (/*FIND PPL WHO HAVE ACCESS TO ACCT AS WWW AND ARE ACTIVE(IN TWO TABLES), BREAK TIES WITH LOWEST AGREENBR*/ SELECT ROW_NUMBER() OVER (PARTITION BY APATA.ACCTNBR,APATA.PERSNBR ORDER BY APATA.AGREENBR) AS ID, APATA.ACCTNBR, APATA.PERSNBR, AP.USERID, AG.AGREENBR FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/ INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/ INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND APAT.PERSNBR=AP.PERSNBR AND APAT.ACCESSTYPCD='WWW' AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/ INNER JOIN OSIBANK.AGREEPERSACCESSTYPACCT APATA ON APATA.AGREENBR=AP.AGREENBR AND APATA.PERSNBR=AP.PERSNBR AND APATA.ACCESSTYPCD=APAT.ACCESSTYPCD /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW'), ACCTNBR]*/ ) Y ON Y.ACCTNBR=A.ACCTNBR AND Y.PERSNBR=A.TAXRPTFORPERSNBR AND Y.ID=1 LEFT JOIN (/*FIND PPL WHO HAVE ACCESS TO ORG AS WWW AND ARE ACTIVE(IN TWO TABLES), BREAK TIES WITH PERSON WHO IS CURRENTLY ACTIVE, WAS ACTIVE FIRST, LOWEST AGREENBR, LOWEST PERSNBR*/ SELECT ROW_NUMBER() OVER (PARTITION BY AG.BYORGNBR ORDER BY CASE WHEN RO.EFFDATE<=TRUNC(CURRENT_DATE) AND (RO.INACTIVEDATE IS NULL OR RO.INACTIVEDATE>TRUNC(CURRENT_DATE)) THEN 0 ELSE 1 END,RO.EFFDATE,AG.AGREENBR,AP.PERSNBR) AS ID, AG.BYORGNBR, AP.USERID, AG.AGREENBR FROM OSIBANK.AGREE AG /*[PK:AGREENBR]*/ INNER JOIN OSIBANK.AGREEPERS AP ON AP.AGREENBR=AG.AGREENBR AND AP.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR] [NEEDS TO BE ACTIVE]*/ INNER JOIN OSIBANK.AGREEPERSACCESSTYP APAT ON APAT.AGREENBR=AP.AGREENBR AND APAT.PERSNBR=AP.PERSNBR AND APAT.ACCESSTYPCD='WWW' AND APAT.ACTIVEYN='Y' /*[PK:AGREENBR, PERSNBR, ACCESSTYPCD('WWW')] [NEEDS TO BE ACTIVE]*/ LEFT JOIN OSIBANK.ORGPERSROLE RO ON RO.ORGNBR=AG.BYORGNBR AND RO.PERSNBR=AP.PERSNBR AND RO.PERSROLECD=APAT.ACCESSTYPCD /*[PK:ORGNBR, PERSROLECD, EFFDATE, PERSNBR]*/ ) Z ON Z.BYORGNBR=A.TAXRPTFORORGNBR AND Z.ID=1 WHERE A.ACCTNBR in ({AccountNumbersHolder})