2013-03-15 6 views
7

Ho il requisito di contare le righe con clausole WHERE diverse dalla stessa tabella. Quanto segue è la potenza richiesta da meOracle: come fare più conteggi con clausole diverse dove il modo migliore?

Bu #A #B #C #D #E #F #G #H #J #K #L #M #N 
GB01 267 284 84 45 35 32 458 801 111 899 892 56 99 
NL01 132 844 65 28 26 12 627 321 56 681 1062 127 128 

Ogni colonna ha i propri criteri, finora ho il seguente SQL ma sembra già brutto e non esattamente quello che mi serve tornare

SELECT * FROM (
    SELECT 
    c_unit_code, 
    COUNT(*) AS ADVICE_EXPORT, 
    0 AS CONFIRMATION_EXPORT, 
    0 AS ISSUANCE_STANDBY 
    FROM EXIMTRX.EPLC_MASTER 
    WHERE (CLS_FLG NOT LIKE 'YES' OR CLS_FLG IS NULL) AND (
    form_of_lc LIKE 'IRREVOCABLE' OR 
    form_of_lc LIKE 'REVOCABLE' OR 
    form_of_lc LIKE 'IRREVOCABLE TRANSFERABLE' OR 
    form_of_lc LIKE 'REVOCABLE TRANSFERABLE') AND our_eng LIKE 'ADVICE' 
    GROUP BY c_unit_code 
UNION 
    SELECT 
    c_unit_code, 
    0 AS ADVICE_EXPORT, 
    COUNT(*) AS CONFIRMATION_EXPORT, 
    0 AS ISSUANCE_STANDBY 
    FROM EXIMTRX.EPLC_MASTER 
    WHERE (CLS_FLG NOT LIKE 'YES' OR CLS_FLG IS NULL) AND (
    form_of_lc LIKE 'IRREVOCABLE' OR 
    form_of_lc LIKE 'REVOCABLE' OR 
    form_of_lc LIKE 'IRREVOCABLE TRANSFERABLE' OR 
    form_of_lc LIKE 'REVOCABLE TRANSFERABLE') AND our_eng LIKE 'CONFIRMATION' 
    GROUP BY c_unit_code 
UNION 
    SELECT 
    c_unit_code, 
    0 AS ADVICE_EXPORT, 
    0 AS CONFIRMATION_EXPORT, 
    COUNT(*) AS ISSUANCE_STANDBY 
    FROM EXIMTRX.EPLC_MASTER 
    WHERE (CLS_FLG NOT LIKE 'YES' OR CLS_FLG IS NULL) AND (
    form_of_lc LIKE 'IRREVOCABLE STANDBY' OR 
    form_of_lc LIKE 'REVOCABLE STANDBY' OR 
    form_of_lc LIKE 'IRREVOC TRANS STANDBY') 
    GROUP BY c_unit_code 
); 

e questo è ciò che restituisce

GB01 0 0 17 
GB01 0 39 0 
GB01 80 0 0 
NL01 0 0 32 
NL01 0 159 0 
NL01 341 0 0 

Qualche idea, come posso ottenere ciò di cui ho bisogno?

+0

qual è il dato su cui lo stai utilizzando .. ?? –

+1

Sei sicuro di voler utilizzare LIKE per una corrispondenza esatta? Sembra che tu abbia bisogno di form_of_lc in ('IRREVOCABLE', 'REVOCABLE', 'IRREVOCABLE TRANSFERABLE') –

risposta

11
SELECT 
    c_unit_code, 
    COUNT(case when YOUR_CONDITIONS_FOR_ADVICE_EXPORT then 1 end) AS ADVICE_EXPORT, 
    COUNT(case when YOUR_CONDITIONS_FOR_CONFIRMATION_EXPORT then 1 end) AS CONFIRMATION_EXPORT, 
    COUNT(case when YOUR_CONDITIONS_FOR_ISSUANCE_STANDBY then 1 end) AS ISSUANCE_STANDBY 
    FROM EXIMTRX.EPLC_MASTER 
    GROUP BY c_unit_code 
Problemi correlati