아래 행의 결과와 윗행의 결과를 합치고 싶습니다. 0 10 197

by DB 꿈나무 [Oracle 기초] [2018.12.05 11:44:12]


20181205_114103.png (8,145Bytes)

이건 제가 만든 쿼리입니다.

select 업체명,노선번호,버스유형,기점,종점,면허대수,거리km,운행횟수,배차간격,첫차출발시간,막차출발시간
from(select
TB_ADM_BUSCOMP.COMPNM as 업체명,
TB_ADM_BUSROUTE.ROUTENO as 노선번호,
decode(TB_ADM_BUSROUTE.ROUTETPCD, 1, '지선', 2, '간선' , 3, '좌석' , 4, '광역' , 5, '리무진', 6, '마을버스', 7, '순환', 8 ,'급행간선', 9 , '지선순환'  ) as 버스유형,
FC_BUSSTOP_BSTOPNM(TB_ADM_BUSROUTE.ORIGIN_BSTOPID) AS 기점,
FC_BUSSTOP_BSTOPNM(TB_ADM_BUSROUTE.DEST_BSTOPID) AS 종점,
TB_ADM_BUSROUTE.LIC_BUSCNT as 면허대수,
TB_ADM_BUSROUTE.ROUTELEN * (0.001) as 거리km,
TB_ADM_BUSROUTE.RUNCNT as 운행횟수,
TB_ADM_ROUTESCHED.MIN_ALLOCGAP||'~'||TB_ADM_ROUTESCHED.MAX_ALLOCGAP as 배차간격,
decode(TB_ADM_ROUTESCHED.DOWTPCD, 10, '상행', 11, '하행' ) as 상하행,
TB_ADM_ROUTESCHED.FBUS_DEPHMS as 첫차출발시간,
TB_ADM_ROUTESCHED.LBUS_DEPHMS as 막차출발시간
from
TB_ADM_BUSCOMP,
TB_ADM_ROUTETOCOMP,
TB_ADM_BUSROUTE,
TB_ADM_ROUTESCHED,
TB_ADM_BUSSTOP
where TB_ADM_BUSCOMP.COMPID = TB_ADM_ROUTETOCOMP.COMPID
and TB_ADM_ROUTETOCOMP.routeid = TB_ADM_BUSROUTE.routeid
and TB_ADM_BUSROUTE.routeid = TB_ADM_ROUTESCHED.routeid
and TB_ADM_BUSROUTE.USEYN = 1
and TB_ADM_BUSCOMP.USEYN = 1
and TB_ADM_BUSROUTE.routeid = 165000002
order by 3)
group by 업체명,노선번호,버스유형,기점,종점,면허대수,거리km,운행횟수,배차간격,첫차출발시간,막차출발시간

 

결과를 첫차출발시간 컬럼에 - 상행 0500, 하행 0445

          막차출발시간 컬럼에 - 상행 2300, 하행 2300

이렇게 한줄로 만들고 싶은데 구글에 검색해서 이것저것해보아도 계속 오류가 나네요 ㅠ

 

by DB초보자입니다 [2018.12.06 09:03:12]
select '상행'||rtrim(substr(sumf_tm,0,instr(sumf_tm,',')),',')||', 하행'||ltrim(substr(sumf_tm,instr(sumf_tm,',')),',')  from
(
select LISTAGG(first_tm,',') WITHIN GROUP(ORDER BY bus_no) as sumf_tm ,LISTAGG(last_tm,',') WITHIN GROUP(ORDER BY bus_no) as suml_tm
  from
(
	select '2'as bus_no,'0500' as first_tm , '2300' as last_tm from dual
	union all
	select '2'as bus_no,'0445' as first_tm , '2300' as last_tm from dual
)

)비슷하게 흉내는 내봤씁니다.

by DB 꿈나무 [2018.12.06 09:39:35]

감사합니다~ 참고하여 완성하도록하겠습니다. 제가 많이초보라 쫌 어렵긴하네요 ㅎㅎ 감사합니다


by 마농 [2018.12.06 09:59:13]

조인 조건이 부족해 보입니다.
TB_ADM_BUSSTOP 에 대한 조인 조건이 없네요?


by DB 꿈나무 [2018.12.06 12:35:42]

저기 LISTAGG함수에서 에러가 계속 뜨네요 ㅠㅠ 윗행과 아래행의 첫막차 시간정보를 합치려는데

그걸 합치는 기준이 노선번호밖에 없는데 자꾸 에러가 뜨네요 ㅠㅠ


by 우리집아찌 [2018.12.06 13:00:13]

상행/하행 구분값이 없는데 어찌 구분하나요?


by DB 꿈나무 [2018.12.06 13:14:24]

구분값은 표출만 안하고

decode(TB_ADM_ROUTESCHED.DOWTPCD, 10, '상행', 11, '하행' ) as 상하행

이걸로 구분은 시켜놨습니다 ㅎ


by 마농 [2018.12.06 13:16:20]
SELECT 업체명, 노선번호, 버스유형, 기점, 종점, 면허대수, 거리km, 운행횟수, 배차간격
     , LISTAGG(상하행||' '||첫차출발시간, ', ') WITHIN GROUP(ORDER BY 상하행) 첫차출발시간
     , LISTAGG(상하행||' '||막차출발시간, ', ') WITHIN GROUP(ORDER BY 상하행) 막차출발시간
  FROM (SELECT a.compnm                                  AS 업체명
             , c.routeno                                 AS 노선번호
             , DECODE(c.routetpcd, 1, '지선'
                                 , 2, '간선'
                                 , 3, '좌석'
                                 , 4, '광역'
                                 , 5, '리무진'
                                 , 6, '마을버스'
                                 , 7, '순환'
                                 , 8, '급행간선'
                                 , 9, '지선순환'
                                 )                       AS 버스유형
             , fc_busstop_bstopnm(c.origin_bstopid)      AS 기점
             , fc_busstop_bstopnm(c.dest_bstopid  )      AS 종점
             , c.lic_buscnt                              AS 면허대수
             , c.routelen * (0.001)                      AS 거리km
             , c.runcnt                                  AS 운행횟수
             , d.min_allocgap||'~'||d.max_allocgap       AS 배차간격
             , DECODE(d.dowtpcd, 10, '상행', 11, '하행') AS 상하행
             , d.fbus_dephms                             AS 첫차출발시간
             , d.lbus_dephms                             AS 막차출발시간
          FROM tb_adm_buscomp     a
             , tb_adm_routetocomp b
             , tb_adm_busroute    c
             , tb_adm_routesched  d   -- 간단한 알리아스 사용으로 쿼리를 보기 좋게
--           , tb_adm_busstop         -- 불필요한 조인 제거
         WHERE a.compid  = b.compid
           AND b.routeid = c.routeid
           AND c.routeid = d.routeid
           AND c.USEYN   = 1
           AND a.USEYN   = 1
           AND c.routeid = 165000002
--       ORDER BY 3                   -- 불필요한 정렬 제거
        ) 
 GROUP BY 업체명, 노선번호, 버스유형, 기점, 종점, 면허대수, 거리km, 운행횟수, 배차간격
;

 


by DB 꿈나무 [2018.12.06 13:23:57]

LISTAGG(상하행||' '||첫차출발시간, ', ') WITHIN GROUP(ORDER BY 상하행) 첫차출발시간
     , LISTAGG(상하행||' '||막차출발시간, ', ') WITHIN GROUP(ORDER BY 상하행) 막차출발시간

저 order by 부근에서 자꾸  FROM 키워드가 필요한 위치에 없습니다. 라는 에러가 어제부터 계속 떠서

찾고있는데 원인을 모르겠어요 ㅠㅠ


by 마농 [2018.12.06 13:39:10]

오라클 버전이 어떻게 되나요?
LISTAGG 는 오라클 11G 부터 가능합니다.
http://gurubee.net/article/55512


by DB 꿈나무 [2018.12.06 13:46:51]

앜..죄송합니다. 여태11G로 사용중인줄알았는데.. 지금 버전 확인해보니..10G 였다니..

SELECT * FROM v$version WHERE banner LIKE 'Oracle%';

(Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi)

감사합니다 마농님. 덕분에 문제가 수월하게 해결될것 같습니다. ^^

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