by 성이 [SQL Query] 오라클. sql [2020.02.12 14:22:39]
안녕하세요 SQL 초보인데 막히는 부분이 있어서요 아래쿼리로 출력하면 이미지 111 처럼 나옵니다 222 이미지에 엑셀대로 출력을 하고 싶은데... DB출력에서 IN_ ~ 로시작하는게 양하 부분이고 OUT_~ 로 시작하는 컬럼이 적하 부분입니다 OPER 이 선사구여 즉~ 엑셀대로 IN_F2 IN_F2 IN_F4 IN_F5 JDL OUT_F2 OUT_F2 OUT_F4 OUT_F5 이런식으로 출력이 되게 하고 싶은데 감이 잘 안오네요 ㅠㅠ 조언 부탁드립니다. 지금 쿼리로는 한 선사에 양하,적하가 일렬로 나오는데 한 선사에 양하부분이 끝나면 그다음 적하 부분으로 넘어갔으면 하는 내용입니다 ----------------------------------------------------------------- SELECT OPER, IN_F2, IN_M2, IN_F4, IN_M4, OUT_F2, OUT_M2, OUT_F4, OUT_M4 FROM ( SELECT VSP_SHP_OPERATOR OPER, SUM(INF2) IN_F2, SUM(INM2) IN_M2, SUM(INF4) IN_F4, SUM(INM4) IN_M4, SUM(OUTF2) OUT_F2, SUM(OUTM2) OUT_M2, SUM(OUTF4) OUT_F4, SUM(OUTM4) OUT_M4 FROM ( SELECT VSP_SHP_OPERATOR, NVL(DECODE(VSP_SHP_DISLOAD, 'D', DECODE(VSP_SHP_STATUS, 'M', 0, DECODE (SUBSTR (VSP_SHP_ISO,1, 1), '2', 1, 0))), 0) INF2, NVL(DECODE(VSP_SHP_DISLOAD, 'D', DECODE(VSP_SHP_STATUS, 'M', DECODE(SUBSTR (VSP_SHP_ISO,1, 1), '2', 1, 0))), 0) INM2, NVL(DECODE(VSP_SHP_DISLOAD, 'D', DECODE(VSP_SHP_STATUS, 'M', 0, DECODE (SUBSTR (VSP_SHP_ISO,1, 1), '2', 0, 1))), 0) INF4, NVL(DECODE(VSP_SHP_DISLOAD, 'D', DECODE(VSP_SHP_STATUS, 'M', DECODE(SUBSTR (VSP_SHP_ISO,1, 1), '2', 0, 1))), 0) INM4, NVL(DECODE(VSP_SHP_DISLOAD, 'L', DECODE(VSP_SHP_STATUS, 'M', 0, DECODE (SUBSTR (VSP_SHP_ISO,1, 1), '2', 1, 0))), 0) OUTF2, NVL(DECODE(VSP_SHP_DISLOAD, 'L', DECODE(VSP_SHP_STATUS, 'M', DECODE(SUBSTR (VSP_SHP_ISO,1, 1), '2', 1, 0))), 0) OUTM2, NVL(DECODE(VSP_SHP_DISLOAD, 'L', DECODE(VSP_SHP_STATUS, 'M', 0, DECODE (SUBSTR (VSP_SHP_ISO,1, 1), '2', 0, 1))), 0) OUTF4, NVL(DECODE(VSP_SHP_DISLOAD, 'L', DECODE(VSP_SHP_STATUS, 'M', DECODE(SUBSTR (VSP_SHP_ISO,1, 1), '2', 0, 1))), 0) OUTM4 FROM VSB_VOYAGE A, VSP_SHIP B, CDV_VESSEL C WHERE 1=1 AND A.VSB_VOY_STATUS = 'D' AND A.VSB_VOY_VESSEL = B.VSP_SHP_VESSEL(+) AND A.VSB_VOY_VOYAGE = B.VSP_SHP_VOYAGE(+) AND A.VSB_VOY_BERTHNO <> 'OT' AND B.VSP_SHP_CLASS <> 'OT' AND B.VSP_SHP_PLANST = 'C' AND A.VSB_VOY_CANCEL IS NULL AND SUBSTR(VSP_SHP_COMPDATE,1, 6) = '202001' AND A.VSB_VOY_VESSEL = C.CDV_VSL_CODE(+) AND ( C.CDV_VSL_PROVER NOT IN ( 'VS','VU' ) OR C.CDV_VSL_PROVER IS NULL ) ) GROUP BY VSP_SHP_OPERATOR )
SELECT vsp_shp_operator 선사 , DECODE(vsp_shp_disload, 'D', '양하', 'L', '적하', '', 'S.TTL') 구분 , COUNT(CASE WHEN SUBSTR(vsp_shp_iso, 1, 1) = '2' AND vsp_shp_status != 'M' THEN 1 END) f_20 , COUNT(CASE WHEN SUBSTR(vsp_shp_iso, 1, 1) = '2' AND vsp_shp_status = 'M' THEN 1 END) m_20 , COUNT(CASE WHEN SUBSTR(vsp_shp_iso, 1, 1) != '2' AND vsp_shp_status != 'M' THEN 1 END) f_40 , COUNT(CASE WHEN SUBSTR(vsp_shp_iso, 1, 1) != '2' AND vsp_shp_status = 'M' THEN 1 END) m_40 , COUNT(CASE WHEN AND vsp_shp_status != 'M' THEN 1 END) f_tot , COUNT(CASE WHEN AND vsp_shp_status = 'M' THEN 1 END) m_tot , COUNT(*) tot FROM vsb_voyage a , vsp_ship b , cdv_vessel c WHERE 1=1 AND a.vsb_voy_status = 'D' AND a.vsb_voy_vessel = b.vsp_shp_vessel(+) AND a.vsb_voy_voyage = b.vsp_shp_voyage(+) AND a.vsb_voy_berthno <> 'OT' AND b.vsp_shp_class <> 'OT' AND b.vsp_shp_planst = 'C' AND a.vsb_voy_cancel IS NULL AND vsp_shp_compdate LIKE '202001'||'%' AND a.vsb_voy_vessel = c.cdv_vsl_code(+) AND (c.cdv_vsl_prover NOT IN ('VS', 'VU') OR c.cdv_vsl_prover IS NULL) GROUP BY vsp_shp_operator, ROLLUP(vsp_shp_disload) ;