Hi,
I am having a problem to merge multiple records into 1 single record. Please have a look on the sample data below to have better understanding:
[sample]
Table Name:
TBL_STUDENT
SEQ_NO ID_NO ID_TYPE
-------- ------- ---------
1 S11198 01
2 K11198 01
3 Z11198 02
Table Name:
TBL_STUDENT_SERV
SEQ_NO SERV
-------- -------
1 A
1 B
2 A
3 C
* SERV can only has 3 values, which is 'A', 'B' or 'C'.
[/sample]
By using the SQL query below I am able to generate the below output, but it will cause a lot of performance issue when records growing larger.
[output]
SEQ_NO ID_NO ID_TYPE SERV_A SERV_B SERV_C
-------- ------- ---------- --------- -------- ---------
1 S11198 01 Y Y N
2 K11198 01 Y N N
3 Z11198 02 N N Y
[/output]
Code:
SELECT C.SEQ_NO, C.ID_NO, C.ID_TYPE, CS.SERV
CASE
WHEN (SELECT COUNT(1) FROM TBL_STUDENT_SERV CS WHERE CS.SEQ_NO = C.SEQ_NO AND CS.SERV = 'A') > 0 THEN 'Y'
ELSE 'N'
END AS SERV_A,
CASE
WHEN (SELECT COUNT(1) FROM TBL_STUDENT_SERV CS WHERE CS.SEQ_NO = C.SEQ_NO AND CS.SERV = 'B') > 0 THEN 'Y'
ELSE 'N'
END AS SERV_B,
CASE
WHEN (SELECT COUNT(1) FROM TBL_STUDENT_SERV CS WHERE CS.SEQ_NO = C.SEQ_NO AND CS.SERV = 'C') > 0 THEN 'Y'
ELSE 'N'
END AS SERV_C
FROM TBL_STUDENT C;
I have totally run out of idea to optimize the SQL above and hope to get help from the experts.
Thank in advanced.