2009-11-26 2 views
0
SELECT 
PB_BANK_CODE, ---- DB ITEM 
PB_BANK_NAME, ---- DB ITEM 
TOTAL_AMOUNT --- NON DB ITEM 
     FROM GLAS_PDC_BANKS   

where PB_COMP_CODE=:parameter.COMP_CODE AND pb_bank_code in(select distinct pc_bank_from from glas_pdc_cheques where PC_COMP_CODE=:parameter.COMP_CODE AND pc_due_dateTIME between :block01.date_from and :block01.date_to AND ISNULL(pc_discd,'X') = 'R') 
order by pb_bank_code 

ИТОГО:присоединения запрос с использованием 2 таблицы

BEGIN 
    SELECT SUM(PC_AMOUNT) INTO :BLOCK02.TOTAL_AMOUNT 
    FROM GLAS_PDC_CHEQUES 
    WHERE PC_DUE_DATE BETWEEN :BLOCK01.DATE_FROM AND :BLOCK01.DATE_TO 
    AND PC_BANK_FROM = :BLOCK02.PB_BANK_CODE 
    AND NVL(PC_DISCD, 'X') = 'R'; 
EXCEPTION WHEN OTHERS THEN :BLOCK02.TOTAL_AMOUNT := 0; 
END; 

ГРАНТ ИТОГО также должны быть отображены.

Как я могу присоединиться к выше двух операторов выбора

ответ

1

Использование:

SELECT b.pb_bank_code, 
      b.pb.bank_name, 
      b.total_amount, 
      COALESCE(x.sum_amount, 0) 
    FROM GLAS_PDC_BANKS b 
LEFT JOIN (SELECT c.pc_bank_from, 
        SUM(c.pc_amount) 'sum_amount' 
      FROM GLAS_PDC_CHEQUES c 
      WHERE c.pb_comp_code = :parameter.COMP_CODE 
       AND c.pc_due_date BETWEEN :block01.date_from AND :block01.date_to 
       AND c.pc_discd = 'R' 
     GROUP BY c.pc_bank_from) x ON x.pc_bank_from = b.pb_bank_code 

Я опущенные:

NVL(PC_DISCD, 'X') = 'R'; --Oracle syntax btw 
ISNULL(pc_discd,'X') = 'R' 

Там нет смысла в преобразовании нулевое значение х, если он ISN» т, который вы ищете.

Смежные вопросы