2011-05-26 4 views
0

Collé la requête sql actuellement utilisée pour générer le rapport à partir du script shell Unix. Je souhaite avoir une colonne d'addition COUNT (cdw.file_id) writeoffcnt à la requête sql ci-dessous qui affiche le nombre de l'enregistrement qui correspond à mg_disp_status = 0 et mig_disp_code = 3. Le champ existant COUNT (cdw.file_id) cnt doit avoir le nombre d'enregistrements correspondant à mg_disp_status = 1 et mig_disp_code <> 2. Comment puis-je modifier la requête?Groupe de requêtes SQL par

SELECT fs.file_id, 
       fs.file_id_serv, 
       fs.file_process_dt, 
       fs.file_name, 
       fs.total_records, 
       RTRIM (d.description_text) source, 
       SUM(amount), 
       COUNT (cdw.file_id) cnt 
      FROM file_status fs, 
       dr_data_work cdw, 
       descriptions d, 
       contacts ec 
      WHERE file_process_dt >= TO_DATE ('${START_DATE}', 'DD-MON-YYYY') 
       AND file_process_dt < TO_DATE ('${END_DATE}', 'DD-MON-YYYY') 
       AND fs.ext_contact_id = ec.ext_contact_id 
       -- 
       AND ec.description_code = d.description_code 
       AND cdw.file_id = fs.file_id 
       AND mg_disp_status = 1 
       AND mig_disp_code <> 2 
     GROUP BY fs.file_id, 
       fs.file_id_serv, 
       fs.file_process_dt, 
       fs.file_name, 
       fs.total_records, 
       RTRIM (d.description_text); 

Répondre

3

Je ne comprends pas toutes vos permutations de besoins, mais quelque chose comme ce qui suit devrait fonctionner:

SELECT 
. 
. 
. 
SUM(CASE mg_disp_status=0 and mig_disp_code =3 THEN 1 ELSE 0 END) cnt1, 
SUM(CASE mg_disp_status=1 and mig_disp_code <> 2 THEN 1 ELSE 0 END) cnt2, 
+0

Merci beaucoup pour l'info – Arav

0

Joignez deux fois avec différents alias et faites votre compte:

SELECT fs.file_id, 
      fs.file_id_serv, 
      fs.file_process_dt, 
      fs.file_name, 
      fs.total_records, 
      RTRIM (d.description_text) source, 
      SUM(amount), 
      COUNT (cdw.file_id) cnt1, COUNT (cdw2.file_id) cnt2 
     FROM file_status fs, 
      dr_data_work cdw, dr_data_work cdw2, 
      descriptions d, 
      contacts ec 
     WHERE file_process_dt >= TO_DATE ('${START_DATE}', 'DD-MON-YYYY') 
      AND file_process_dt < TO_DATE ('${END_DATE}', 'DD-MON-YYYY') 
      AND fs.ext_contact_id = ec.ext_contact_id 
      -- 
      AND ec.description_code = d.description_code 
      AND cdw.file_id = fs.file_id AND cdw2.file_id = fs.file_id 
      AND cdw.mg_disp_status = 1 AND cdw2.mg_disp_status = 0 
      AND cdw.mig_disp_code <> 2 AND cdw2.mg_disp_code = 3 



    GROUP BY fs.file_id, 
      fs.file_id_serv, 
      fs.file_process_dt, 
      fs.file_name, 
      fs.total_records, 
      RTRIM (d.description_text); 
+0

Merci beaucoup pour l'info. Je peux avoir 3 types de scenanarios. Un seul enregistrement peut exister dans la table dr_data_work avec cdw.mg_disp_status = 1 AND cdw.mig_disp_code <> 2 pour l'ID de fichier 112. Il peut également y avoir deux enregistrements ou plus avec les deux types (cdw.mg_disp_status = 1 AND cdw .mig_disp_code <> 2) (cdw.mg_disp_status = 0 ET cdw.mig_disp_code = 3) ou individuellement pour un autre identifiant de fichier 113. Un autre cas est également Un enregistrement unique peut exister dans la table dr_data_work (cdw.mg_disp_status = 0 AND cdw.mig_disp_code = 3) pour l'ID de fichier 114. Vous ne savez pas si cette requête gère cela. – Arav

+0

est là quelqu'un qui peut m'aider – Arav