2015-03-11 2 views
0

Оба запроса ниже работают независимо друг от друга. Мне нужно объединить их в один и выполнить следующее.Объединить запрос (содержащий подзапрос) с другим запросом

  1. Подсчитайте число отправлений (DATA_CANNON_DISPATCHED) для сотрудника для диапазона дат.

  2. Подсчитайте количество заполненных рассылок для сотрудника для диапазона дат. Я уже настроен для обработки этого в php. Выполнение этого запроса было бы неплохо иметь, но не обязательно.

  3. Подсчитайте количество кодов клиринговых действий, которые составляют 10,35,80 для сотрудника для диапазона дат.

Код:

/* 1 */ 
SELECT COUNT(INCIDENT_NUMBER) AS NTFR 
FROM ETA 
WHERE CLEARING_ACTION_CODE IN ('10-Trouble Cleared','35-False Report','80-No Trouble Found - C.O.') 
AND INCIDENT_NUMBER IN (SELECT INCIDENT_NUMBER 
         FROM HDESK 
         WHERE DATA_CANNON_DISPATCHED = 'Yes' 
         AND CUST_EMPLOYEE_ID = 'n9950298' 
         AND REPORTED_DATE_TIME_RAW_VALUE 
         BETWEEN 1420510400 AND 1420906799) 


/* 2 */ 
SELECT INCIDENT_NUMBER, STATUS,DATA_CANNON_DISPATCHED 
FROM HDESK 
WHERE DATA_CANNON_DISPATCHED = 'Yes' 
AND CUST_EMPLOYEE_ID = 'n9950298' 
AND REPORTED_DATE_TIME_RAW_VALUE 
BETWEEN 1420510400 AND 1420906799 


/*This is what I came up with that works. */ 
/* 3 */ 
SELECT H.INCIDENT_NUMBER, H.STATUS,DATA_CANNON_DISPATCHED , CLEARING_ACTION_CODE 
FROM ARADMIN.WIN_LT_RPTG_HELP_DESK H, ARADMIN.WIN_LT_RPTG_ETA_APPT_INFO E 
WHERE H.DATA_CANNON_DISPATCHED = 'Yes' 
AND H.CUST_EMPLOYEE_ID = 'n9950298' 
AND H.REPORTED_DATE_TIME_RAW_VALUE BETWEEN 1420510400 AND 1420906799 
AND H.INCIDENT_NUMBER = E.INCIDENT_NUMBER (+) 

ответ

0

Попробуйте

SELECT COUNT(e.INCIDENT_NUMBER)as NTFR, 
     h.INCIDENT_NUMBER, 
     h.STATUS, 
     h.DATA_CANNON_DISPATCHED, 
     COUNT(e.CLEARING_ACTION_CODE) as CLEARING_ACTION_CODE 
FROM ETA e 
INNER JOIN HDESK h 
on e.INCIDENT_NUMBER= h.INCIDENT_NUMBER 
WHERE h.DATA_CANNON_DISPATCHED = 'Yes' 
         AND e.CLEARING_ACTION_CODE 
    IN ('10-Trouble Cleared','35-False Report','80-No Trouble Found - C.O.') 

         AND h.CUST_EMPLOYEE_ID = 'n9950298' 
         AND h.REPORTED_DATE_TIME_RAW_VALUE 
         BETWEEN 1420510400 AND 1420906799 

GROUP BY e.INCIDENT_NUMBER,e.CLEARING_ACTION_CODE,h.STATUS,h.DATA_CANNON_DISPATCHED 
+0

Спасибо за ответ Khurram. Я запустил это и «ORA-00937: не групповая групповая функция». – MattJamison

+0

@MattJamison Посмотреть мои правки Я добавил группу по предложению –

+0

ценят ответ, к сожалению, это тоже ошибка. ORA-00979: не выражение GROUP BY – MattJamison

0

Для данного emplyoee и период вы можете использовать этот запрос. Я не уверен, что вы хотели в некоторых частях, попробуйте удалить distinct, если что-то не в порядке.

Если вам нужна таблица, как: Id - Донесения - Законченное - Коды затем запрос быть легко преобразованы путем добавления id в select частях и добавление group by пункта.

select 
    count(distinct incident_number) dispatches, 
    count(decode(data_cannon_dispatched, 'Yes', 1)) completed, 
    count(distinct clearing_action_code) codes 
    from eta e join hdesk h using (incident_number) 
    where substr(e.clearing_action_code, 1, 3) in ('10-', '35-', '80-') 
    and cust_employee_id = 'n9950298' 
    and reported_date_time_raw_value between 1420510400 and 1420906799 

Тестовые данные и результаты:

with eta as (select 1 incident_number, '10-Trouble Cleared' clearing_action_code from dual 
    union select 2, '10-Trouble Cleared' from dual 
    union select 3, '80-No Trouble Found - C.O.' from dual), 
hdesk as (
    select 1 incident_number, 'Yes' data_cannon_dispatched, 
    'n9950298' cust_employee_id, 1420510400 reported_date_time_raw_value, 
    5 status from dual 
    union select 2, 'Yes', 'n9950298', 1420510401, 6 from dual 
    union select 3, 'No', 'n9950298', 1420510402, 6 from dual 
    union select 3, 'No', 'aqq50298', 1420510403, 0 from dual) 
select 
    count(distinct incident_number) dispatches, 
    count(decode(data_cannon_dispatched, 'Yes', 1)) completed, 
    count(distinct clearing_action_code) codes 
    from eta e join hdesk h using (incident_number) 
    where substr(e.clearing_action_code, 1, 3) in ('10-', '35-', '80-') 
    and cust_employee_id = 'n9950298' 
    and reported_date_time_raw_value between 1420510400 and 1420906799 

Результат:

DISPATCHES COMPLETED CODES 
---------- ---------- ---------- 
     3   2   2 

Примечания:

  • было бы лучше хранить освобождаясь Коды действий и клиринговых описания действий в разные таблицы, таким образом, вы не должны allwa ys хранить целые строки в таблице.
  • способ, которым вы храните даты, несколько не читается ;-)
  • все это проще для человека, отвечая при добавлении некоторых входных и выходных данных.

SQL Fiddle

+0

ваш первый выбор дал ORA-00905: отсутствует ключевое слово. Что касается второго ответа, где вы пришли к результатам? Вы используете онлайн-тестовую страницу sql? sqlfiddle, может быть? – MattJamison

+0

** 1) ** запрос работает для меня, просто скопирован и вставлен в него ** 2) ** нет, тестовые данные находятся в подзапросах: 'eta as (...' и 'hdesk as (...' I ' Я попытаюсь создать sqlfiddle и добавить к ответу. Добавлен запрос: –

+0

[SQL Fiddle] (http://sqlfiddle.com/#!4/2b406/1). –

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