database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39090 게시물 읽기
No. 39090
쿼리문제 조금만 도와주세요.
작성자
박주영(vf19)
작성일
2011-11-11 15:51
조회수
4,939

 path_id path_type       start_id        end_id          dist    time    cost    seq

7677 LB000159 LB000159017 LB000159018 487 1.5 5.72064 1
7677 LB000159 LB000159018 LB000159019 638 1.9 5.72064 2
7677 LB000159 LB000159019 LB000159020 427 1.3 5.72064 3
7677 TRN LB000164080 LB000159020 8.7 5.72064 4
7677 LB000164 LB000164080 LB000164081 451 1.7 5.72064 5
7677 LB000164 LB000164081 LB000164082 546 2.1 5.72064 6
7677 TRN LB000159001 LB000164082 2.1 5.72064 7
7677 LB000159 LB000159001 LB000159002 325 1 5.72064 8
 
아까 답변을 얻었던 질문인데 , 결과값을 다르게 표출해야 한다고 해서 .. 
두시간째 머리를 굴리고 있는데, 결과가 신통치가 않네요 .. 
제가 원하는 결과는 다음과 같습니다.
LB000159017+LB000159018+LB000159019+LB000159020,TRN,LB000164080+LB000164081+LB000164082,TRN,LB000159001+LB000159002
SEQ 순서대로 START_ID 와 END_ID 를 합쳐주는데 도중에 TRN 이 나오면 , 로 구분을 합니다. 
그리고 START_ID와 END_ID 가 같으면 중복해서 써주면 안되구요. 
아까 답변 해주신분의 쿼리를 고쳐 보고 있는데.. TRN 이 나오면 콤마로 구분해야하는 것에서 힘들어지네요 . 
도와주시면 감사하겠습니다.
이 글에 대한 댓글이 총 2건 있습니다.

WITH t AS
(
SELECT 7677 path_id, 'LB000159' path_type, 'LB000159017' start_id, 'LB000159018' end_id, 487 dist, 1.5 time, 5.72064 cost, 1 seq FROM dual
UNION ALL SELECT 7677, 'LB000159', 'LB000159018', 'LB000159019',  638, 1.9, 5.72064, 2 FROM dual
UNION ALL SELECT 7677, 'LB000159', 'LB000159019', 'LB000159020',  427, 1.3, 5.72064, 3 FROM dual
UNION ALL SELECT 7677, 'TRN'     , 'LB000164080', 'LB000159020', null, 8.7, 5.72064, 4 FROM dual
UNION ALL SELECT 7677, 'LB000164', 'LB000164080', 'LB000164081',  451, 1.7, 5.72064, 5 FROM dual
UNION ALL SELECT 7677, 'LB000164', 'LB000164081', 'LB000164082',  546, 2.1, 5.72064, 6 FROM dual
UNION ALL SELECT 7677, 'TRN'     , 'LB000159001', 'LB000164082', null, 2.1, 5.72064, 7 FROM dual
UNION ALL SELECT 7677, 'LB000159', 'LB000159001', 'LB000159002',  325, 1  , 5.72064, 8 FROM dual

)
SELECT path_id
     , REPLACE(SUBSTR(
       XMLAGG(XMLELEMENT(x, '+', x) ORDER BY seq).EXTRACT('//text()')
       , 2), '+TRN+', ',TRN,') x
  FROM (
        SELECT path_id
             , seq
             , CASE WHEN path_type = 'TRN' THEN 'TRN'
                    WHEN start_id
                       = LAG(end_id) OVER(PARTITION BY path_id ORDER BY seq)
                    THEN end_id
                    ELSE start_id || '+' || end_id
                END x
          FROM t
        )
 GROUP BY path_id
;

마농(manon94)님이 2011-11-11 18:02에 작성한 댓글입니다.

정말 감사합니다. 이것때문에 어제 오늘 계속 끙끙대고 있었는데

금방 해결 되었네요 ..^^..

박주영(vf19)님이 2011-11-12 15:34에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39096로컬디비 설치 방법 문의 드려요.. [1]
신동화
2011-11-14
3334
39093쿼리 도움이 절실합니다. [2]
박주영
2011-11-12
4617
39091검색조건을 JOIN VS WHERE에서 줄때 어떤것이 효율적일까요 ? [2]
2011-11-11
3517
39090쿼리문제 조금만 도와주세요. [2]
박주영
2011-11-11
4939
39089view에 hint 사용 관련
오세원
2011-11-11
4128
39088쿼리로 해결 가능할까요? [2]
박주영
2011-11-11
4211
39084이런 쿼리 가능한가요? [1]
진짜초보
2011-11-11
4189
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다