Reputation: 39
Query:
select
ag.AGENTID as AGENTID, ag.AGENTNAME as AGENTNAME,
case when pc.CONTACTTYPECD='M' then pc.CONTACTNUM end as 'MOBILE',
case when pc.CONTACTTYPECD='R' then pc.CONTACTNUM end as 'RESIDENCE',
case when pc.CONTACTTYPECD='EM' then pc.CONTACTNUM end as 'EMERGENCY_NO'
from
AGENT ag
left join
PARTY p on p.PARTYID = ag.PARTYID
left join
PARTYCONTACT pc on pc.PARTYSEQ = p.PARTYSEQ
where
ag.AGENTID = '10000005'
Output
Expected Output
Upvotes: 2
Views: 61
Reputation: 76
or join to each type of contact seperately like this...
SELECT ag.AGENTID AS AGENTID, ag.AGENTNAME AS AGENTNAME,
MobileContact.CONTACTNUM AS 'MOBILE',
ResidenceContact.CONTACTNUM AS 'RESIDENCE',
EmergencyContact.CONTACTNUM AS 'EMERGENCY_NO'
FROM AGENT ag
LEFT JOIN PARTY p ON p.PARTYID = ag.PARTYID
LEFT JOIN PARTYCONTACT as MobileContact
ON MobileContact.PARTYSEQ = p.PARTYSEQ
AND MobileContact.CONTACTTYPECD='M'
LEFT JOIN PARTYCONTACT as ResidenceContact
ON ResidenceContact.PARTYSEQ = p.PARTYSEQ
AND ResidenceContact.CONTACTTYPECD='R'
LEFT JOIN PARTYCONTACT as EmergencyContact
ON EmergencyContact.PARTYSEQ = p.PARTYSEQ
AND EmergencyContact.CONTACTTYPECD='EM'
WHERE ag.AGENTID = '10000005'
Upvotes: 1
Reputation: 29051
Try this:
SELECT ag.AGENTID AS AGENTID, ag.AGENTNAME AS AGENTNAME,
MAX(CASE WHEN pc.CONTACTTYPECD='M' THEN pc.CONTACTNUM END) AS 'MOBILE',
MAX(CASE WHEN pc.CONTACTTYPECD='R' THEN pc.CONTACTNUM END) AS 'RESIDENCE',
MAX(CASE WHEN pc.CONTACTTYPECD='EM' THEN pc.CONTACTNUM END) AS 'EMERGENCY_NO'
FROM AGENT ag
LEFT JOIN PARTY p ON p.PARTYID = ag.PARTYID
LEFT JOIN PARTYCONTACT pc ON pc.PARTYSEQ = p.PARTYSEQ
WHERE ag.AGENTID = '10000005'
GROUP BY ag.AGENTID, ag.AGENTNAME
Upvotes: 1