SQL-запрос группируется по - PullRequest
0 голосов
/ 26 мая 2011

Вставлен SQL-запрос, который используется в настоящее время для генерации отчета из сценария оболочки Unix.Я хочу добавить дополнительный столбец COUNT (cdw.file_id) writeoffcnt в приведенный ниже SQL-запрос, в котором отображается количество записей, соответствующих mg_disp_status = 0 и mig_disp_code = 3.Существующее поле COUNT (cdw.file_id) cnt должно иметь количество записей, которое соответствует mg_disp_status = 1 и mig_disp_code <> 2. Как я могу изменить запрос?

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

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

Я не совсем понимаю все ваши варианты требований, но что-то вроде следующего должно работать:

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 голосов
/ 26 мая 2011

Присоединяйтесь дважды с разными псевдонимами и делайте подсчеты:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...