기본 Base가 되는 SQL은 아래와 같은데요...
우선순위는 NO
메뉴는 총 4가지
수량은 각각 1개 입니다.
주문 수량을 받으면 우선순위별로 데이터를 만드는데 우선순위가 넘어가면 다시 1부터 ...
예를 들어 3개면 (햄버거 1, 피자 1, 스파게티 1)
그런데 10개가 들어오면 우선순위별로 처리 되어서 (햄버거 3, 피자 3, 스파 2, 치킨 2)로 계산해야 합니다.
저는 보통 reculsive난 connect by로 생각은 해봤는데 산술적으로도 가능할거 같기도 하구요...
간단하게 계산할수 있을까요? 도움 바랍니다....
WITH t AS
(SELECT 1 NO, 'HBG' menu_cd, 1 qty FROM dual UNION ALL
SELECT 2, 'PZZ' menu_cd, 1 qty FROM dual UNION ALL
SELECT 3, 'SPG' menu_cd, 1 qty FROM dual UNION ALL
SELECT 4, 'CHK' menu_cd, 1 qty FROM dual)
SELECT *
FROM t
WHERE 주문수량 = :1
WITH t AS ( SELECT 1 no, 'HBG' menu_cd, 1 qty FROM dual UNION ALL SELECT 2, 'PZZ', 1 FROM dual UNION ALL SELECT 3, 'SPG', 1 FROM dual UNION ALL SELECT 4, 'CHK', 1 FROM dual ) SELECT no, menu_cd, qty , v , FLOOR(v / 4) + CASE WHEN MOD(v, 4) >= no THEN 1 ELSE 0 END cnt FROM t , (SELECT 10 v FROM dual) ;
감사합니다.
하다보니까 궁금한게 하나 더 생겼는데요...
우선순위 까지의 누적 수량을 좀 구했으면 합니다.
즉, 아래 같은 경우 다음과 같이 수량 계산이 되려면 ... 생각보다 쉽지 않네요...
NO | MENU_CD | QTY | 단계별 누적 수량 |
1 | HBG | 1 | 1 |
2 | PZZ | 2 | 3 |
3 | SPG | 2 | 5 |
4 | CHK | 3 | 8 |
WITH t AS
(
SELECT 1 no, 'HBG' menu_cd, 1 qty FROM dual
UNION ALL SELECT 2, 'PZZ', 2 FROM dual
UNION ALL SELECT 3, 'SPG', 2 FROM dual
UNION ALL SELECT 4, 'CHK', 3 FROM dual
)
SELECT no, menu_cd, qty
FROM t