2011-05-26 154 views
0

粘貼當前正在使用的sql查詢以從unix shell腳本生成報告。我想在下面的sql查詢中添加一列COUNT(cdw.file_id)writeoffcnt,它顯示與mg_disp_status = 0和mig_disp_code = 3相匹配的記錄的 計數。 現有字段COUNT(cdw.file_id)cnt應具有匹配 mg_disp_status = 1和mig_disp_code <> 2的記錄計數。如何修改查詢?SQL查詢分組:

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); 

回答

3

我不完全理解你的要求,所有排列,但像下面應該工作:

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

非常感謝您的信息 – Arav 2011-06-23 05:42:31

0

與不同的別名加入兩次,做你的罪狀:

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

非常感謝這些信息。我可以有3種類型的情景。 dr_data_work表中可能存在單個記錄,其中cdw.mg_disp_status = 1,而對於file_id 112,cdw.mig_disp_code <> 2也可能存在兩種或兩種以上類型的記錄(cdw.mg_disp_status = 1 AND cdw .mig_disp_code <> 2)(cdw.mg_disp_status = 0 AND cdw.mig_disp_code = 3)或單獨爲另一個文件ID 113。另一種情況是,對於file_id 114,dr_data_work表中可能存在單個記錄(cdw.mg_disp_status = 0且cdw.mig_disp_code = 3)。不確定此查詢是否處理此問題。 – Arav 2011-05-26 23:22:41

+0

有沒有人可以幫助我 – Arav 2011-05-29 08:50:45