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 39088 게시물 읽기
No. 39088
쿼리로 해결 가능할까요?
작성자
박주영(vf19)
작성일
2011-11-11 10:54ⓒ
2011-11-11 10:55ⓜ
조회수
4,211

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+LB000159018+LB000159019+LB000159019+LB000159020
+TRN+LB000164080+LB000164081+LB000164081+LB000164082+TRN+LB000159001+LB000159002
이렇게 한줄로 표현하고 싶습니다.
seq 순서대로 start_id+end_id 를 계속 합치고, path_type 이 TRN 이 나오면 TRN 만 표현하고 start_id,end_id 는 넣지
않습니다. 그후에 계속 start_id,end_id 를 합치구요. 
pl sql 문을 사용하지 않고 이 방법을 쿼리로 해결 할수 있을까요?
이 글에 대한 댓글이 총 2건 있습니다.

WITH T AS(
SELECT 7677 PATH_ID , 'LB000159' PATH_TYPE, 'LB000159017' start_id , 'LB000159018' end_id ,1 SEQ FROM DUAL UNION ALL
SELECT 7677, 'LB000159', 'LB000159018', 'LB000159019', 2 FROM DUAL UNION ALL
SELECT 7677, 'LB000159', 'LB000159019', 'LB000159020', 3 FROM DUAL UNION ALL
SELECT 7677, 'TRN'   , 'LB000164080', 'LB000159020', 4 FROM DUAL UNION ALL
SELECT 7677, 'LB000164', 'LB000164080', 'LB000164081', 5 FROM DUAL UNION ALL
SELECT 7677, 'LB000164', 'LB000164081', 'LB000164082', 6 FROM DUAL UNION ALL
SELECT 7677, 'TRN'     , 'LB000159001', 'LB000164082', 7 FROM DUAL UNION ALL
SELECT 7677, 'LB000159', 'LB000159001', 'LB000159002', 8 FROM DUAL
)
    SELECT
             PATH_ID
            ,SUBSTR(XMLAGG(XMLELEMENT(x, '+', ID) ORDER BY PATH_ID,SEQ).EXTRACT('//text()'),2) AS SUM_STR
      FROM
        (
            SELECT
                     PATH_ID
                    ,CASE WHEN PATH_TYPE = 'TRN' THEN 'TRN' ELSE start_id ||'+'||end_id END AS ID
                    ,SEQ
             FROM T
     )
     GROUP BY PATH_ID

이동호(ssamldh)님이 2011-11-11 11:59에 작성한 댓글입니다.

 pl sql 문으로 짜고 있었는데 이게 쿼리로도 가능하군요.. 

정말감사합니다. ^^

박주영(vf19)님이 2011-11-11 13:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39091검색조건을 JOIN VS WHERE에서 줄때 어떤것이 효율적일까요 ? [2]
2011-11-11
3516
39090쿼리문제 조금만 도와주세요. [2]
박주영
2011-11-11
4938
39089view에 hint 사용 관련
오세원
2011-11-11
4128
39088쿼리로 해결 가능할까요? [2]
박주영
2011-11-11
4211
39084이런 쿼리 가능한가요? [1]
진짜초보
2011-11-11
4189
39083오라클 로그 남기기 [1]
김성환
2011-11-11
4471
39082중복되지 않게 합산 한 결과 출력 [1]
바램
2011-11-10
4745
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다