깜놀하는 해므찌로

Oracle LISTAGG 실전 사용 예시 / MySQL GROUP_CONCAT / LEFT OUTER JOIN 본문

IT

Oracle LISTAGG 실전 사용 예시 / MySQL GROUP_CONCAT / LEFT OUTER JOIN

agnusdei1207 2022. 8. 5. 20:43
반응형
SMALL
<select id="excelDownSelectList" parameterType="vo" resultType="vo">
		/* vo.excelDownSelectList*/
		<![CDATA[ 
			SELECT 				ROWNUM														   						  excelRow
                        	  ,TO_CHAR(A.RGST_DT,'YYYY.MM.DD')                                                		  rgstDt
                              ,C.NAME                                                                                 rgstId   
                              ,(SELECT TA.NAME FROM t_ad_user TA WHERE TA.USE_YN = 'Y' AND TA.SEQ = A.APPROVER )      approver
                              ,A.STATUS                                                              				  status   
                              ,A.PRJCT_NM                                                               			  prjctNm     
                              ,A.APPLY_RSN                                                          				  applyRsn
                              ,TO_CHAR(A.APPLY_DATE, 'YYYY.MM.DD')                                          		  applyDate   
                           	  ,A.ATCH_FILE_ID                                                            			  atchFileId
                              ,'OPEN-W-'||LPAD(A.OT_SEQ,5,'0')                                             			  docuNum
                              ,B.emplyName        																	  emplyName
                         FROM  T_OVER_TIME A
              LEFT OUTER JOIN (SELECT
                                       A.OT_SEQ
                                       , LISTAGG(B.NAME||'('||CASE WHEN A.TOTAL_HOUR IS NOT NULL AND A.TOTAL_HOUR <> '0' THEN A.TOTAL_HOUR||'시간' ELSE '' END
                                       ||CASE WHEN A.TOTAL_MIN IS NOT NULL AND A.TOTAL_MIN <> '0' THEN A.TOTAL_MIN||'분' ELSE '' END||')',', ') WITHIN GROUP(ORDER BY A.AD_SEQ)  emplyName
                                    FROM T_OVER_ADD A
                         LEFT OUTER JOIN T_AD_USER B
                                      ON A.EMPLY_SEQ = B.SEQ
                                     AND B.USE_YN = 'Y'
                                   WHERE A.USE_YN = 'Y'
                                   GROUP BY A.OT_SEQ
                   ) B
                                ON  A.OT_SEQ = B.OT_SEQ
                   LEFT OUTER JOIN  T_AD_USER C 
                                ON  A.RGST_ID = C.SEQ 
                               AND C.USE_YN = 'Y'
                             WHERE  A.USE_YN='Y'
		]]>   
			<include refid="Where"/> 
		<![CDATA[  
		 ORDER BY A.RGST_DT ASC, A.OT_SEQ ASC  
		]]>	
	</select>

1. LEFT OUTER JOIN 서브쿼리 활용

2. LISTAGG 를 활용하여 명단을 조회

반응형
LIST