Reputation: 13
I'm trying to clean this up and only have one instance instead of 10.
This certain entry is connected to each of the individual data pieces within the CASE
statements (10 of the 12 listed).
Seeing if anyone has any ideas (other than joining the CTE over and over, i.e.
LEFT JOIN sessions_CTE scte1 on scte1.person_id = p.person_id and
scte1.session_id = '229856'
LEFT JOIN sessions_CTE scte2 on scte2.person_id = p.person_id and scte2.session_id = '229846'
LEFT JOIN sessions_CTE scte3 on scte3.person_id = p.person_id and scte3.session_id = '229798'...
That works fine, it just is huge and sketchy on the DB)
Here is my query, thanks for any ideas you guys might have:
WITH sessions_CTE AS
(
select
a.person_id,
s.session_id,
s.abbreviation,
s.title,
st.sessionTime_id,
d.abbreviation as day,
sl.minutes length,
r.name room
from
attendeesregistered a
inner join sessiontimes st on a.sessiontime_id =
st.sessiontime_id
inner join sessions s on st.session_id = s.session_id
inner join slots on st.slot_id = slots.slot_id
inner join days d on slots.day_id = d.day_id
inner join rooms r on slots.room_id = r.room_id
inner join slottimes on slots.slottime =
slottimes.slottime_id
inner join ses_length sl on slottimes.length =
sl.ses_length_id
WHERE a.event = '23533'
--and ROWNUM <= 10
)
SELECT DISTINCT p.person_id,
p.email "Email",
p.firstname "First Name",
p.lastname "Last Name",
p.jobTitle "Job Title",
p.companyname "Company Name",
CASE
WHEN scte.session_id = '229744' THEN 'Registered'
-- ELSE ''
END as ExecutiveChannelPartnerMeeting,
CASE
WHEN scte.session_id = '229753' THEN 'Registered'
ELSE ''
END as ChickenParm,
CASE
WHEN scte.session_id = '229761' THEN 'Registered'
ELSE ''
END as Pesto,
CASE
WHEN scte.session_id = '229764' THEN 'Registered'
ELSE ''
END as mcyds,
CASE
WHEN scte.session_id = '229770' THEN 'Registered'
ELSE ''
END as bigmac,
CASE
WHEN scte.session_id = '229840' THEN 'Registered'
ELSE ''
END as mtndew,
CASE
WHEN scte.session_id = '229841' THEN 'Registered'
ELSE ''
END as sprite,
CASE
WHEN scte.session_id = '229852' THEN 'Registered'
ELSE ''
END as corndogs,
CASE
WHEN scte.session_id = '229853' THEN 'Registered'
ELSE ''
END as burritto,
CASE
WHEN scte.session_id = '229856' THEN 'Registered'
ELSE ''
END as mickeymouse,
CASE
WHEN scte.session_id = '229842' THEN 'Registered'
ELSE ''
END as mario,
CASE
WHEN scte.session_id = '229847' THEN 'Registered'
ELSE ''
END as link
--scte.session_id,
--scte.title
FROM people p
RIGHT JOIN sessions_CTE scte on scte.person_id = p.person_id
WHERE p.event = '23533'
AND p.person_id = 2388207
--AND ROWNUM <= 25
--GROUP BY p.person_id
Current output:
ID | Exec. |Chicken Parm | Pesto | ......
----------- ---------- ------------- ----------- ------------
2388207 | Registered| (NULL) | (NULL) | ........
----------- ----------- ------------ ----------- ------------
2388207 | (NULL) | (NULL) | Reistered | ........
----------- ----------- ------------ ----------- ------------
2388207 | (NULL) | Registered| (NULL) | ........
----------- ----------- ------------ ----------- ------------
Desired Output
ID | Exec. |Chicken Parm | Pesto | ......
--------------------------------------------------------------
2388207 |Registered | Registered | Registered| ........
----------- ----------- ------------ ----------- ------------
Upvotes: 1
Views: 61
Reputation: 29677
You could group by, and then use MAX for the CASE WHEN's
WITH sessions_CTE AS
(
...
)
SELECT
p.person_id,
p.email AS "Email",
p.firstname AS "First Name",
p.lastname AS "Last Name",
p.jobTitle AS "Job Title",
p.companyname AS "Company Name",
MAX(CASE WHEN session_id = '229744' THEN 'Registered' END) AS "ExecutiveChannelPartnerMeeting",
MAX(CASE WHEN session_id = '229753' THEN 'Registered' END) AS "ChickenParm",
MAX(CASE WHEN session_id = '229761' THEN 'Registered' END) AS "Pesto",
MAX(CASE WHEN session_id = '229764' THEN 'Registered' END) AS "mcyds",
MAX(CASE WHEN session_id = '229770' THEN 'Registered' END) AS "bigmac",
MAX(CASE WHEN session_id = '229840' THEN 'Registered' END) AS "mtndew",
MAX(CASE WHEN session_id = '229841' THEN 'Registered' END) AS "sprite",
MAX(CASE WHEN session_id = '229852' THEN 'Registered' END) AS "corndogs",
MAX(CASE WHEN session_id = '229853' THEN 'Registered' END) AS "burritto",
MAX(CASE WHEN session_id = '229856' THEN 'Registered' END) AS "mickeymouse",
MAX(CASE WHEN session_id = '229842' THEN 'Registered' END) AS "mario",
MAX(CASE WHEN session_id = '229847' THEN 'Registered' END) AS "link"
FROM people p
RIGHT JOIN sessions_CTE scte on scte.person_id = p.person_id
WHERE p.event = '23533'
AND p.person_id = 2388207
GROUP BY p.person_id, p.email, p.firstname, p.lastname, p.jobTitle, p.companyname;
Upvotes: 1