Объединение нескольких подзапросов в один запрос - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь объединить несколько подзапросов для формирования порядка детализации отчета в состоянии «В процессе».Короче говоря, есть несколько этапов, через которые проходит заказ, и клиент хочет получить общий запас на каждом этапе на уровне подразделения.

Это моя попытка объединить первые две пары, мысли были: если я не смогу сделать, я не смог бы добавить две другие.

select In_Progress_Total.purchase_order, In_Progress, In_Progress_Awaiting_Vas
from
(   select order_header.purchase_order, move_task.work_group,SUM(move_task.qty_to_move) AS In_Progress
    from move_task
    join order_header
    on move_task.task_id = order_header.order_id
    where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and order_header.status = 'In Progress'
    group by order_header.purchase_order, move_task.work_group); as In_Progress_Total
join
(   select order_header.purchase_order, move_task.work_group, SUM(move_task.qty_to_move) AS In_Progress_Awaiting_Vas
    from move_task
    join order_header
    on move_task.task_id = order_header.order_id
    where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and move_task.from_loc_id like 'DEPT%VAS' and order_header.status = 'In Progress'
    group by order_header.purchase_order, move_task.work_group); as Awaiting_Vas)
on In_Progress_Total.purchase_order = Awaiting_Vas.purchase_order
order by In_Progress_Total.purchase_order

Когда выполняются эти две вещи, он запускает запрос как два запроса вместо одного, я получаю следующую ошибку (однажды разрешенная вызывает другой):

Несколько запросов/ Ошибка

Дополнительные два запроса для объединения:

select order_header.purchase_order, move_task.work_group,SUM(move_task.qty_to_move) AS In_Progress_Awaiting_Labels
from move_task
join order_header
on move_task.task_id = order_header.order_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and move_task.from_loc_id like 'OUTVAS' and order_header.status = 'In Progress'
group by order_header.purchase_order, move_task.work_group


select order_header.purchase_order, move_task.work_group,SUM(move_task.qty_to_move) AS Everything_Else
from move_task
join order_header
on move_task.task_id = order_header.order_id
where move_task.site_id = 'USCOL1' and move_task.client_id = 'SDRY-US' and order_header.status = 'In Progress' and move_task.from_loc_id not like '%OUTVAS%' and move_task.from_loc_id not like 'DEPT%VAS' 
group by order_header.purchase_order, move_task.work_group

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 28 сентября 2018

Рассмотрите возможность использования условного агрегирования, когда вы перемещаете WHERE условия в CASE операторы для различных SUM агрегатов.Обязательно используйте псевдонимы таблиц для удобства чтения.

SELECT o.purchase_order, m.work_group,
       SUM(CASE 
               WHEN m.site_id = 'USCOL1' AND 
                    m.client_id = 'SDRY-US' AND 
                    o.status = 'In Progress'
               THEN m.qty_to_move
               ELSE NULL
           END) AS In_Progress,

       SUM(CASE 
               WHEN m.site_id = 'USCOL1' AND 
                    m.client_id = 'SDRY-US' AND 
                    m.from_loc_id LIKE 'DEPT%VAS' AND 
                    o.status = 'In Progress'
               THEN m.qty_to_move
               ELSE NULL
           END) AS In_Progress_Awaiting_Vas,

       SUM(CASE
               WHEN m.site_id = 'USCOL1' AND 
                    m.client_id = 'SDRY-US' AND 
                    m.from_loc_id LIKE 'OUTVAS' AND 
                    o.status = 'In Progress'
               THEN m.qty_to_move
               ELSE NULL
           END) AS In_Progress_Awaiting_Labels,

       SUM(CASE
               WHEN m.site_id = 'USCOL1' AND 
                    m.client_id = 'SDRY-US' AND 
                    o.status = 'In Progress' AND 
                    m.from_loc_id NOT LIKE '%OUTVAS%' AND 
                    m.from_loc_id NOT LIKE 'DEPT%VAS'
               THEN m.qty_to_move
               ELSE NULL
           END) AS Everything_Else

FROM move_task m
JOIN order_header o ON m.task_id = o.order_id 
GROUP BY o.purchase_order, m.work_group
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...