안녕하세요~ 어제부터 은근히 머리싸매고 고민중에 있는 쿼리입니다.
생각해보면 간단할 줄 알았는데 갑자기 머리가 잘 안돌아가요~
부탁좀 드릴꼐요~~
일단 어떤 품명을 검색하는 쿼리가 있습니다.
이 쿼리에 사용구분 컬럼이 있는데(part_using_gu) 이컬럼의 값이 2인 도번은 조회가 되지 않아야 합니다.
하지만 2번임에도 불구하고 재고가 있다면 조회가 되어야 합니다.
일단은 원래 품명을 검색하는 쿼리입니다.
SELECT a.part_no, a.part_name, a.as_prod_code, a.k_srch_no srch_no, a.pack_unit, '' book_srch_no,
a.k_prdt_code, a.agent_pri*1.1 agent_pri, a.repair_store_pri*1.1 repair_pri,
a.real_buyer_pri buyer_pri, DECODE(RTRIM(a.buy_gu),'1','수입','2','외주','3','자가','???') buy_gu,
ROUND(a.agent_pri/1.15,-1)*1.1 chong_pri, DECODE(a.part_using_gu,'2','미사용 상태','') using_gu,
a.grade, a.remark
FROM (SELECT part_no, part_name, pack_unit, k_srch_no, as_prod_code, k_prdt_code, agent_pri,
repair_store_pri, real_buyer_pri, part_using_gu, grade, buy_gu, remark
FROM SD_PART_MAST
WHERE part_no LIKE RPAD(:ctrl.temp,12,' ')||'%'
UNION ALL
SELECT /*+ index(sd_part_mast.SD_PART_MAST_PK)*/
part_no, part_name, pack_unit, k_srch_no, as_prod_code, k_prdt_code, agent_pri,
repair_store_pri, real_buyer_pri, part_using_gu, grade, buy_gu, remark
FROM SD_PART_MAST,
(SELECT RPAD(pat_pno,12,' ') pat_pno, pat_epno FROM jajae.partmst
WHERE pat_epno LIKE :ctrl.temp||'%' AND pat_pno != pat_epno)
WHERE pat_pno = part_no) a
제가 위에 있는 쿼리로 밑에 조건을 붙여 완성한 쿼리입니다.
SELECT a.part_no, a.part_name, a.pack_unit, a.k_srch_no,
NVL(a.as_prod_code, ''), '',
a.agent_pri*1.1, a.repair_store_pri*1.1, a.real_buyer_pri,
DECODE(NVL(a.c_agent_pri,0),0,ROUND(a.agent_pri/1.15,-1),NVL(a.c_agent_pri,0))*1.1 chong_pri,
DECODE(a.part_using_gu,'2','미사용 상태',''), a.grade,
DECODE(RTRIM(a.buy_gu),'1','수입','2','외주','3','자가','???'), a.remark, a.k_prdt_code
FROM (SELECT part_no, part_name, pack_unit, k_srch_no, as_prod_code, agent_pri, c_agent_pri,
repair_store_pri, real_buyer_pri, part_using_gu, grade, buy_gu, remark, k_prdt_code
FROM SD_PART_MAST
WHERE part_no = RPAD(:temp,12,' ')
UNION ALL
SELECT /*+ index(sd_part_mast.SD_PART_MAST_PK)*/
part_no, part_name, pack_unit, k_srch_no, as_prod_code, agent_pri, c_agent_pri,
repair_store_pri, real_buyer_pri, part_using_gu, grade, buy_gu, remark, k_prdt_code
FROM SD_PART_MAST,
(SELECT RPAD(pat_pno,12,' ') pat_pno, pat_epno FROM jajae.partmst
WHERE pat_epno = :temp AND pat_pno != pat_epno)
WHERE pat_pno = part_no
) a
WHERE a.part_no NOT IN ( SELECT a.part_no
FROM AS_PART_STOCK a, SD_PART_MAST c
WHERE YYMM BETWEEN TO_CHAR(SYSDATE,'yyyy')||'01' AND TO_CHAR(SYSDATE,'yyyymm')
AND c.part_no = a.part_no
AND c.part_using_gu = '2'
GROUP BY a.part_no
HAVING SUM(pre_y_qty+ipgo_qty-chgo_qty-exp_sun_chul_qty-NVL(pick_qty,0)) = '0');
위에 커리에 녹색을 제가 붙인것입니다. part_using_gu 가 2이고 재고가 0인것은 조회가 안되도록
이렇게 하면 조회는 잘 되는데 속도가 너무 느리고
forms 라는 프로그램에서 적용하려고 하니까 자꾸 오류가 나요 저 쿼리자체로 토드에서 실행하면 오류가 안나는데
그래서 혹시 다른 방법 있으시면 부탁드립니다.
두번쨰로 고민한 방법은요~~~~~ AS_PART_STOCK 이 테이블이 재고 테이블인데요
다른 테이블이 있는데 그것은 AS_PART_STOCK 처럼 입출고 내역을 더해서 재고가 나오는 것이 아닌
그 도번에 해당하는 재고 칼럼이 있어서 바로 재고를 확인 할 수 있는 테이블 이에요
SELECT a.part_no
FROM AS_PART_STOCK_view a, SD_PART_MAST c
WHERE c.part_no = a.part_no
AND c.part_using_gu = '2'
이렇게 하면 part_using_gu = '2' 이면서 재고가 있는 도번이 조회되는데
맨위에 있는 쿼리와 어떻게 접목시켜야 할지 감이 잘 안와서 첫번째방법을 쓴것입니다.
AS_PART_STOCK_VIEW 테이블을 써서 하면 sum함수를 쓰지 않아도 되서 더 간결할 것 같은데요
도움 부탁드립니다.