처음부터 정리하여 올려봤습니다.. 0 5 1,095

by 김이수 [2015.08.20 15:06:34]


테이블 : T_HJD_CD_INFO 

DIVISION_CD, DO_NM,  GU_NM, DONG_NM

테이블 : T_FMY_SITUA 

GROUP_NO, MEM_CNT 

테이블 : T_MEM_SITUA 

MEM_NO, GROUP_NO

 

테이블과 그에 따른 컬럼입니다. 

GROUP_NO는 13자리이고 그 앞의 8자리까지가 DIVISION_CD 와 같습니다. 그렇기 때문에 

WHERE H.DIVISION_CD = SUBSTRING(A.GROUP_NO,1,8) 이런식의 조건을 계속 주었던 겁니다.

 

문제가 되는것은 MEM_NO <<이 컬럼입니다.

MEM_CNT 가 4라고 하면 MEM_NO 는 1 ~4 까지의 값이 있습니다. 

MEM_NO가 콤마(,)로 합쳐서서 나오게 하려고 

DISTINCT 절을 추가해줬던 겁니다. 

 

테이블 : T_HJD_CD_INFO 와 테이블 : T_FMY_SITUA 를 조인해서 얻고자 하는 목적은

13자리의 GROUP_NO 를 SUBSTRING으로 나눈 DIVISION_CD  와, 

DO_NM,  GU_NM, DONG_NM 이 값들을 얻기위함이고, 

 

테이블 : T_MEM_SITUA 를 조인하려는 이유는 MEM_NO 을 얻기 위해서입니다. 그런데 MEM_NO은 한 가지의 데이터가 아니기 때문에...고민고민 하다가

두 테이블을 조인걸어서 사용하여 MEM_NO를 문자열로 합쳐서 JSP에서 spit하여 사용하려 했습니다.

 

그래서 조회했을 때 이렇게 컬럼이 나오도록 하는것이 목표입니다.. 

GROUP_NO  MEM_NO  DO_NM,  GU_NM, DONG_NM

 

GROUP_NO  MEM_NO DIVISION_CD   는 PK입니다. 

 

감사합니다. 

by 김이수 [2015.08.20 15:19:45]

..질문이 이상한건가요.ㅠ

원하던.. 답은 얻었는데 전반적인 문제점을 고쳐보고 싶어서 ..올렸습니다. 

 


by 마농 [2015.08.20 15:29:08]
SELECT f.group_no
     , STUFF((SELECT ',' + m.mem_no
                FROM t_mem_situa m
               WHERE m.group_no = f.group_no
               ORDER BY m.mem_no
                 FOR XML PATH('')
              ), 1, 1, '') mem_no
     , h.do_nm, h.gu_nm, h.dong_nm
  FROM t_fmy_situa f
 INNER JOIN t_hjd_cd_info h
    ON h.division_cd = SUBSTRING(f.group_no, 1, 8)
;

 


by 김이수 [2015.08.20 15:35:00]

...이렇게 소스코드가 간결해지는게 놀랍네요.. 

그런데 MSSQL 은 + 가 안되는것 같습니다.

 ','이 부분이 계속 에러가 뜨네요. 


by 마농 [2015.08.20 15:37:45]

CONCAT(',', m.mem_no)


by 김이수 [2015.08.20 15:39:47]

감사합니다 공부하겠습니다.. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입