마농님, 정리한 내용 다시 올려드립니다.
A, B 두개의 Class에 제공되는 끼니는 각각 3끼와 2끼입니다.
class | portion_cnt |
A | 3 |
B | 2 |
class | seq | order_cnt | Meal1 | Meal2 | Meal3 |
A | 1 | 2 | MN1 | MN1 | MN1 |
A | 2 | 1 | MN2 | MN3 | MN2 |
B | 3 | 1 | MN4 | MN4 | |
B | 4 | 1 | MN5 | MN5 | |
B | 5 | 1 | MN6 | MN6 | |
B | 6 | 5 | SP1 | SP2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | WITH t2 AS ( SELECT 'A' class, 1 seq, 2 order_cnt, 'MN1' Meal1, 'MN1' Meal2, 'MN1' Meal3 FROM dual UNION ALL SELECT 'A' , 2, 1, 'MN2' , 'MN3' , 'MN2' FROM dual UNION ALL SELECT 'B' , 3, 1, 'MN4' , 'MN4' , '' FROM dual UNION ALL SELECT 'B' , 4, 1, 'MN5' , 'MN5' , '' FROM dual UNION ALL SELECT 'B' , 5, 1, 'MN6' , 'MN6' , '' FROM dual UNION ALL SELECT 'B' , 6, 5, 'SP1' , 'SP2' , '' FROM dual ) -- t2 만 이용해 풀었습니다. -- 모든 메뉴가 'SP', 'MN' 으로 시작한다는 가정으로 풀었습니다. -- 'MN' 외에도 다른 메뉴가 있다면 mn 을 주석부분으로 대체하세요 SELECT SUM (order_cnt * (sp + mn)) cnt FROM ( SELECT class , seq, order_cnt , SIGN(INSTR(Meal1||Meal2||Meal3, 'SP' )) sp , REGEXP_COUNT(Meal1||Meal2||Meal3, 'MN' ) mn --, CASE WHEN Meal1 NOT LIKE 'SP%' THEN 1 ELSE 0 END --+ CASE WHEN Meal2 NOT LIKE 'SP%' THEN 1 ELSE 0 END --+ CASE WHEN Meal3 NOT LIKE 'SP%' THEN 1 ELSE 0 END mn FROM t2 ) ; |