DB SELECT 질문 0 3 1,399

by 그루비 [SQL Query] [2015.03.13 16:40:02]


제가 지금 한테이블에 있는 자료들을 화면으로 뿌려주려고 합니다.

CODE LABEL MCODE SCODE NAME
B00 AM1     A
BA0 AM2 B00   B
BAA AM3 B00 BA0 C
BAB AM3 B00 BA0 C
BAC AM3 B00 BA0 C
R00 AM1 B00 BA0 A
RA0 AM2 R00   B
RAA AM2 R00   B
RAB AM3 R00 RA0 C
RAC AM3 R00 RA0 C
RAD AM3 R00 RA0 C
RAE AM3 R00 RA0 C
RAF AM3 R00 RA0 C

제가 이런 테이블을 가지고 새로운 조회를 하려고 합니다.

MCODE는 중간 코드로 부모를 가지고 있는 코드입니다.

SCODE는 최하층 분류코드로 MCODE의 CODE를 칭합니다.

CODE는 각각의 NAME의 코드명입니다.

 

이런 정보를 가지고 조회를 하려고하는데

TOP MIDDLE BOTTOM
A    
  B  
    C
    C
    C
A    
  B  
  B  
    C
    C
    C
    C
    C

식으로 표현을 하려고하는데 NAME컬럼값을 분할을 해서 넣을수 있는지 궁금해서 올립니다.

by 창조의날개 [2015.03.13 16:52:33]
WITH TT(CODE,	LABEL,	MCODE,	SCODE,	NAME) AS(
SELECT 'B00',	'AM1',	 NULL, 	 NULL,  'A' FROM DUAL UNION ALL
SELECT 'BA0',	'AM2',	'B00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'BAA',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'BAB',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'BAC',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'R00',	'AM1',	'B00',	'BA0',	'A' FROM DUAL UNION ALL
SELECT 'RA0',	'AM2',	'R00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'RAA',	'AM2',	'R00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'RAB',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAC',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAD',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAE',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAF',	'AM3',	'R00',	'RA0',	'C' FROM DUAL
)
SELECT DECODE(LABEL,'AM1',NAME) TOP
     , DECODE(LABEL,'AM2',NAME) MIDDLE
     , DECODE(LABEL,'AM3',NAME) BOTTOM
FROM TT
;

R00은 MCODE와 SCODE가 NULL 이어야 하지 않나요?

뭔가 이상해서 LABEL를 이용했습니다.


by 그루비 [2015.03.13 17:04:52]

와 이런식으로 해도 되는구나;;;

공부를 더 해야 겟네요


by 창조의날개 [2015.03.13 17:06:42]

R00가 MCODE와 SCODE가 NULL 이라면 이렇게도 가능은 하지만 위에것이 더 좋죠..


WITH TT(CODE,	LABEL,	MCODE,	SCODE,	NAME) AS(
SELECT 'B00',	'AM1',	 NULL, 	 NULL,  'A' FROM DUAL UNION ALL
SELECT 'BA0',	'AM2',	'B00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'BAA',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'BAB',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'BAC',	'AM3',	'B00',	'BA0',	'C' FROM DUAL UNION ALL
SELECT 'R00',	'AM1',	 NULL,	 NULL,	'A' FROM DUAL UNION ALL
SELECT 'RA0',	'AM2',	'R00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'RAA',	'AM2',	'R00',	 NULL,  'B' FROM DUAL UNION ALL
SELECT 'RAB',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAC',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAD',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAE',	'AM3',	'R00',	'RA0',	'C' FROM DUAL UNION ALL
SELECT 'RAF',	'AM3',	'R00',	'RA0',	'C' FROM DUAL
)
SELECT CASE WHEN MCODE IS NULL AND SCODE IS NULL THEN NAME END AS TOP
     , CASE WHEN MCODE IS NOT NULL AND SCODE IS NULL THEN NAME END AS MIDDLE
     , CASE WHEN MCODE IS NOT NULL AND SCODE IS NOT NULL THEN NAME END AS BOTTOM
FROM TT
;

 

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