데이터 조회에서 막힙니다. ㅜㅜ 0 3 1,243

by 돝돝 [SQL Query] 쿼리 프로시저 [2017.05.25 12:39:34]


안녕하세요. 날씨가 많이 덥습니다. 하시는 일들 모두 잘되시길 빌며, 질문 하나 올립니다 흑...

 

상위시스템(SAP측)에서 저희 시스템 쪽으로 데이터를 내려주는데요.

다음과 같은 방식으로 내려옵니다.

순번(SEQ) 명칭(NAME) 그룹(GRP)
1 거인 A
2 홍길동 B
3 홍길은 B
4 인간 A
5 김일등 B
6 김이등 B
7 김삼등 B
8 동물 A
9 소순이 B

저 순번에 맞추어서 데이터가 내려오는데, 사실 그룹 B들은 위 순번에 있는 그룹A에 속한 녀석들입니다. 하여 데이터는 사실

순번 그룹 A 명칭 AS 그룹 명칭
2 거인 홍길동
3 거인 홍길은
5 인간 김일등
6 인간 김이등
7 인간 김삼등
9 동물 소순이

위처럼 나와야 하는데요, 처음에 있는 표의 데이터를 어떻게 조회하면 두 번째있는 표처럼 만들 수 있을까요?

프로시저를 만들어서 커서를 통해 내보내야만 할까요?

--여기서 순번은 어떻게 나오든 상관 없습니다..

by 랑에1 [2017.05.25 13:15:53]

WITH T(SEQ, NAME, GRP) AS(
SELECT 1, '거인', 'A' FROM dual UNION ALL
SELECT 2, '홍길동', 'B' FROM dual UNION ALL
SELECT 3, '홍길은', 'B' FROM dual UNION ALL
SELECT 4, '인간', 'A' FROM dual UNION ALL
SELECT 5, '김일등', 'B' FROM dual UNION ALL
SELECT 6, '김이등', 'B' FROM dual UNION ALL
SELECT 7, '김삼등', 'B' FROM dual UNION ALL
SELECT 8, '동물', 'A' FROM dual UNION ALL
SELECT 9, '소순이', 'B' FROM dual
)

SELECT SEQ, GRP2, NAME
FROM 
(
  SELECT SEQ, NAME, GRP, LAST_VALUE(GRP2 ignore nulls) OVER(ORDER BY SEQ) GRP2
  FROM 
  (
    SELECT SEQ, NAME, GRP, CASE WHEN GRP = 'A' THEN NAME ELSE '' END GRP2
    FROM T
  )
)
WHERE GRP = 'B'
ORDER BY SEQ

 


by 돝돝 [2017.05.25 14:12:59]

해결되었습니다.

감사하며, 공부하겠습니다.


by 마농 [2017.05.25 18:14:05]
SELECT seq
     , CONNECT_BY_ROOT(name) name_a
     , name
  FROM t
 WHERE grp = 'B'
 START WITH grp = 'A'
 CONNECT BY PRIOR seq + 1 = seq
   AND grp = 'B'
;

 

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