여러데이터를 가지고 있는 컬럼 값 비교 0 4 1,182

by abysseye [SQL Query] [2018.11.01 18:03:41]


질문을 올려서 다시 수정하여 올립니다.

(너무 두서 없이 질문을 올려서 죄송합니다)

 

table t1 (한 아이디에 구분값이 같은 사람들이 존재)

 id  name gubun
1  홍길동 01
1  이영희 01
1  김철수 01

 

table t2 (가족관계)

name   name2 gubun
홍길동  이영희 배우자
홍길동  홍영수 자녀
홍길동  홍진희 자녀
이영희 홍길동 배우자
이영희 홍영수 자녀
이영희 홍진희 자녀

 

<원하는 결과값 >

id name gubun
1 홍길동 01
1 이영희 01
1 김철수 02

 

table t1 의 데이터를 보시면 한 아이디에 같은 구분값을 가진 이름이 여러개 있는데요

table t2의 데이터의 가족관계를 이용하여 실제 가족으로 된 사람들을 같은 구분값으로 정리하려고 합니다.

고민하다가 table t1을 가공하여  아래처럼 table  t3를 만들어서  구분값을 만들어보려고 했는데..

역시 잘못 생각했던거 같아서요

table t 3(가공테이블)

id name name_in chk
1 홍길동 홍길동,이영희,김철수 1
1 이영희 홍길동,이영희,김철수, 1
1 김철수 홍길동,이영희,김철수  

 

제 생각은 table t2(가족관계) 테이블을 이용하여 name2가 name_in에 포함되어 있으면

chk를 해서 같은 가구값을 만들고 싶어서요

혹시나  하고 in 을 아래처럼 써봤는데 안되더라구요

 select t3.*,(case when  t2.name2 in t3.name_in then 1 end) chk from t2,t3

 where t2.name=t3.name

정리해본다고 했는데 역시 설명이 어렵네요

 

 

 

 

by 마농 [2018.11.01 18:12:30]

제시한 테이블들간의 연관관계가 뭔가 앞뒤가 안맞는 듯한 느낌이 듭니다.
실제 테이블과 가공의 테입블을 분간하여 주세요.
연관관계 흐름에 맞도록 예시자료를 정비해 주세요.
아예 중간 결과물 없이 최초원본 대비 최종결과표로 질문해 주시는게 더 좋습니다.


by abysseye [2018.11.02 09:19:41]

저의 설명이 너무 두서없고 정리가 되지 않아서 혼란을 드렸네요 

죄송합니다.

 


by 마농 [2018.11.05 10:04:56]
WITH t1 AS
(
SELECT 1 id, '홍길동' name, '01' gubun FROM dual
UNION ALL SELECT 1, '이영희', '01' FROM dual
UNION ALL SELECT 1, '김철수', '01' FROM dual
)
, t2 AS
(
SELECT '홍길동' name, '이영희' name2, '배우자' gubun FROM dual
UNION ALL SELECT '홍길동', '홍영수', '자녀'   FROM dual
UNION ALL SELECT '홍길동', '홍진희', '자녀'   FROM dual
UNION ALL SELECT '이영희', '홍길동', '배우자' FROM dual
UNION ALL SELECT '이영희', '홍영수', '자녀'   FROM dual
UNION ALL SELECT '이영희', '홍진희', '자녀'   FROM dual
)
, t3 AS
(
SELECT DISTINCT LEAST(name, name2) name1
     ,       GREATEST(name, name2) name2
  FROM t2
)
, t4 AS
(
SELECT DISTINCT CONNECT_BY_ROOT(name1) name1
     , name2
  FROM t3
 START WITH name1 NOT IN (SELECT name2 FROM t3)
 CONNECT BY PRIOR name2 = name1
)
SELECT a.id, a.name
     , DENSE_RANK() OVER(PARTITION BY id ORDER BY NVL(b.name1, a.name)) gubun
  FROM t1 a
  LEFT OUTER JOIN t4 b
    ON a.name = name2
;

 


by abysseye [2018.11.05 16:21:38]

두서없는 글에서 답변 남겨주셔서 감사합니다.

개인정보들이 들어있는 테이블들이라 정확한 예시를 적지 못했는데

알려주신 쿼리를 참고해서 작성해보면 될것 같아요.

정말 감사합니다.

 

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