2014-11-10 4 views
1

안녕하세요 저는 oracle이 subquery order by에 문제를 생성하여 oracle로이 쿼리를 conerting하는 방법에 대해 고심하고 있습니다. bt_setups (name, description) 서비스가 제공되며, 여기주어진 SQL 쿼리와 동일한 ORACLE SQL

SELECT bt_charges.bt_setup_id, bt_setups.name, IFNULL(bt_charges.charges_for,'OPD') as charges_for_vals, bt_charges.nc_applicable,bt_charges.unit_value,bt_charges.taxtype_id, bt_charges.id, bt_charges.amount, bt_charges.effective_date 
FROM bt_setups JOIN bt_charges ON (bt_charges.bt_setup_id = bt_setups.id AND 
bt_charges.id = (SELECT id 
       FROM bt_charges ilaba 
       WHERE IFNULL(ilaba.charges_for,'OPD') = IFNULL(bt_charges.charges_for,'OPD') 
        AND ilaba.bt_setup_id= bt_setups.id AND ilaba.effective_date <= '2014-11-10' 
        AND ilaba.insprovider_id IS NULL AND ilaba.deleted=0 
       ORDER BY ilaba.effective_date DESC, ilaba.date_entered DESC 
       LIMIT 1)) 
WHERE bt_setups.status='Active' AND bt_setups.deleted=0 
    AND bt_charges.insprovider_id IS NULL 
ORDER BY bt_setups.name, charges_for ASC 

bt_charges (effective_date date, date_entered datetime, charger_for char, bt_setup_id foreign key(bt_setups), insprovider_id foreign key(insproviders))은 현명한

답변

2
SELECT bc.bt_setup_id, bs.name, 
     NVL(bc.charges_for,'OPD') as charges_for_vals, 
     bc.nc_applicable, bc.unit_value, bc.taxtype_id, 
     bc.id, bc.amount, bc.effective_date 
FROM bt_setups bs JOIN bt_charges bc ON (bc.bt_setup_id = bs.id AND 
bc.id = (SELECT id FROM 
        (SELECT ilaba.id, ilaba.bt_setup_id 
        FROM bt_charges ilaba 
        WHERE NVL(ilaba.charges_for,'OPD') = NVL(bc.charges_for,'OPD') 
         AND ilaba.effective_date <= TO_DATE('2014-11-10', 'YYYY-MM-DD') 
         AND ilaba.insprovider_id IS NULL AND ilaba.deleted=0 
        ORDER BY ilaba.effective_date DESC, ilaba.date_entered DESC) 
       WHERE bt_setup_id = bs.id AND ROWNUM = 1 
       )) 
WHERE bs.status='Active' AND bs.deleted=0 
    AND bc.insprovider_id IS NULL 
ORDER BY bs.name, charges_for ASC; 

IFNULL insprovider, EFFECTIVE_DATE에서 적용 서비스 요금이 포함되어 있습니다 ->NVL

'2014년 11월 10일 : 쿼리입니다 '-> TO_DATE ('2014-11-10 ','YYYY-MM-DD ') - ilaba.effective_date에 DATE 유형이 있다고 가정합니다.

LIMIT 1 ->order by 하위 쿼리에

+0

오류가 발생했습니다 : "BT_SETUPS", "ID": 하위 쿼리의 식별자가 잘못되었습니다. 외부 테이블에 액세스 할 수 없다고 생각합니다 –

+0

@wisdom 쿼리에 "bs"별칭을 추가했습니다 – Multisync

+0

@wisdom 별칭이 도움이되지 않는다고 생각합니다. 나는 쿼리를 업데이트했습니다 - 오라클은 서브 서브 쿼리에서 부모 컬럼을 사용하지 않을 것입니다 – Multisync

관련 문제