1 FLAG | ROUTE | REV | PAX |
2 Y1 | HNL-ICN | 100 | 200 |
3 Y1 | HNL-ICN | 1 | 2 |
4 Y2 | HNL-NRT | 3 | 4 |
--아래 식으로 아예 flag와 doute를 신경 안쓰면 되지 않나요? --그럼 y2가 있으면 더하고 없으면 안더하고. --꼭 flag 값이 y1과 y2를 본다면 조건식에 "where flag in('y1', 'y2')" 넣음 될 것 같고요. WITH T AS ( SELECT 'Y1' AS flag, 'HNL-ICN' AS route, 100 AS rev, 200 AS pax FROM DUAL UNION ALL SELECT 'Y1', 'HNL-ICN', 1, 2 FROM DUAL --UNION ALL SELECT 'Y2', 'HNL-NRT', 3, 4 FROM DUAL ) SELECT SUM(rev) AS rev, SUM(pax) AS pax FROM T
-- 꽁수좀 썼습니다.. ^^* WITH T ( FLAG, ROUTE, REV, PAX) AS ( SELECT 'Y1' , 'HNL-ICN' , 100 , 200 FROM DUAL UNION ALL SELECT 'Y1' , 'HNL-ICN' , 1 , 2 FROM DUAL UNION ALL SELECT 'Y2' , 'HNL-ICN' , 3 , 4 FROM DUAL ) SELECT FLAG, ROUTE, REV, PAX ,SUM(REV) OVER(ORDER BY ROWNUM ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) - DECODE(FLAG,'Y2',0,REV) REV_SUM ,SUM(PAX) OVER(ORDER BY ROWNUM ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) - DECODE(FLAG,'Y2',0,PAX) PAX_SUM FROM T
WITH T AS ( SELECT 'Y1' AS flag, 'HNL-ICN' AS route, 100 AS rev, 200 AS pax FROM DUAL UNION ALL SELECT 'Y1', 'HNL-ICN', 1, 2 FROM DUAL --UNION ALL SELECT 'Y2', 'HNL-NRT', 3, 4 FROM DUAL ) SELECT NVL(MAX(DECODE(flag, 'Y2', route, NULL)), MAX(route)), SUM(rev) AS rev, SUM(pax) AS pax FROM T --이경우 마농님 말씀처럼 Y1, Y2가 아닌 또 다른 것이 있다면 ROUTE 결과가 엉뚱하게 나옵니다. --또한 Y1이 ROUTE 값을 다르게 또 가지고 있다고 해도 엉뚱하게 결과가 나옵니다. --이 엉뚱하게 나오는 것에 대해 문제가 있다면 여기에 대한 기준 값이 되는 단서가 더 필요합니다.