Запрос не работает, как задумано, возможна синтаксическая ошибка? - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь просмотреть все рабочие задания в системе, в которых есть три специальных сервисных кода. Запрос делает именно это, однако запрос показывает те рабочие задания, которые имеют эти три конкретных сервисных кода, но он показывает только эти три конкретных сервисных кода. Иногда в рабочем заказе присутствуют другие сервисные коды наряду с тремя, которые я хочу увидеть. В этих случаях мне нужно увидеть три, а также любые другие, которые также находятся в рабочем порядке. Но я не хочу видеть рабочие заказы, в которых нет этих трех сервисных кодов.

Иногда в рабочем задании есть много других сервисных кодов, и ни один из трех меня не интересует, поэтому мне нет дела до этих рабочих заданий.

Примеры вывода:

1) В рабочем задании 123456 есть только код сервиса VPROSWP, и запрос показывает его

2) В рабочем задании 234567 есть служебные коды VPROSWP и DPROSWP, и запрос показывает их

3) На рабочем задании 345678 есть сервисные коды DPROSWP & DREOTLT, и запрос показывает только сервисный код DPROSWP, когда мне нужно увидеть оба из них

4) На рабочем задании 456789 имеется служебный код VSVCVVC, и запрос не показывает его, что нормально, мне не нужно его видеть.

Использование Oracle SQL Developer 18.2

Заранее спасибо всем, кто может помочь.

Вот мой запрос:

SELECT 
O_A_WOM.ACCOUNT_NUMBER, 
O_A_WOM.WORK_ORDER_NUMBER, 
O_A_WOM.WO_TYPE, 
O_A_WOM.WO_STATUS, 
O_A_WOM.INSTALL_COMPLETION_DATE, 
O_A_WOM.EMPLOYEE_TYPE_CODE, 
O_A_WOM.ASSIGNED_INSTALLER, 
O_E_M.EMPLOYEE_NAME, 
O_E_M.REPORTS_TO, 
O_A_WOD.SERVICE_CODE, 
O_A_WOD.TO_QUANTITY
FROM 
O_A_WOD, 
O_A_WOM, 
O_E_M 
WHERE
O_A_WOD.WORK_ORDER_NUMBER = O_A_WOM.WORK_ORDER_NUMBER 
AND O_A_WOM.ASSIGNED_INSTALLER = O_E_M.EMPLOYEE_NUMBER 
AND O_E_M.SITE_ID = O_A_WOM.SITE_ID 
AND O_E_M.EMPLOYEE_TYPE_CODE = 'H3'
AND O_A_WOM.WO_STATUS IN ('CP') 
AND O_A_WOM.WO_TYPE IN ('SR', 'DW', 'UP')
AND O_E_M.REPORTS_TO in (19232) 
AND O_A_WOM.INSTALL_COMPLETION_DATE BETWEEN 1190420 AND 1190420 
AND O_A_WOD.SERVICE_CODE IN ('VPROSWP', 'TPROSWP', 'DPROSWP') 
ORDER BY O_A_WOM.WORK_ORDER_NUMBER
;

1 Ответ

0 голосов
/ 03 мая 2019

Было бы полезно, если бы вы объяснили свои таблицы (как сущности) в связи с вашей проблемой. Мы предполагаем иначе.

Хотя догадываюсь - я предполагаю, что O_A_WOM является сущностью Work Order, а O_A_WOD - сущностью Service Code. Кажется, это логическая проблема, и я думаю, вам придется заменить ваше состояние:

AND O_A_WOD.SERVICE_CODE IN ('VPROSWP', 'TPROSWP', 'DPROSWP') 

... с существующим подзапросом для каждого из необходимых служебных кодов - в соответствии с

AND exists (select 'x' from O_A_WOD sc1 WHERE sc1.WORK_ORDER_NUMBER = O_A_WOM.WORK_ORDER_NUMBER 
            AND sc1.SERVICE_CODE = 'VPROSWP') 
AND exists (select 'x' from O_A_WOD sc2  WHERE sc2.WORK_ORDER_NUMBER = O_A_WOM.WORK_ORDER_NUMBER 
            AND sc2.SERVICE_CODE = 'TPROSWP') 
AND exists (select 'x' from O_A_WOD sc3  WHERE sc3.WORK_ORDER_NUMBER = O_A_WOM.WORK_ORDER_NUMBER 
            AND sc3.SERVICE_CODE = 'DPROSWP') 

Это означает, что будут выбраны только рабочие задания, соответствующие всем 3 сервисным кодам, но будут отображены все сервисные коды для этого заказа. Я думаю, это то, что вы хотели.

Если не совсем правильно (потому что я должен догадаться), решение будет в этом направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...