Мне нужно показать общее количество контейнеров, которые расположены в разных зонах размещения на складе. Проблема в том, что существует 3 этапа данных: ПУНКТЫ, КОНТЕЙНЕРЫ (полные ящики и лотки) и ПОДДОНЫ.
ПОДДОНЫ ИМЕЮТ идентификатор контейнера, но НЕТ местоположения,
КОНТЕЙНЕРЫ ПОЛНОГО СЛУЧАЯ ИМЕЮТ идентификатор контейнера и ИМЕЮТ местоположение, ЛОТКОВЫЕ КОНТЕЙНЕРЫ ИМЕЮТ идентификатор контейнера, но НЕ имеют места, ПУНКТЫНе иметь идентификатор контейнера, но иметь место.
Я могу легко найти местоположение ПОЛНЫХ КОНТЕЙНЕРОВ
Select
sc.location
from
shipping_container
where
container_class = 'carton'
Однако, это не вернет местоположение для ПОДДЕРЖКИ КОНТЕЙНЕРОВ
Я не могу найти местоположение ЛОТКАКОНТЕЙНЕР, связав поле PARENT (ITEM) с INTERNAL_CONTAINER_NUM (КОНТЕЙНЕР ЛОТКА)
Я могу получить список всех местоположений КОНТЕЙНЕРА, используя этот код:
coalesce((select
TOP 1 item2.location
from shipping_container item2
where item2.item is not null and
item2.parent = parent.internal_container_num),(select
TOP 1 item2.location
from shipping_container item2
where item2.item is not null and
item2.parent = item.internal_container_num),'Not Located') 'Location'
была внешняя внутренняя границаjoin
From
shipping_container item
inner join shipping_container parent
on item.parent = parent.internal_container_num
Но когда я пытаюсь выполнить оператор SUM (CASE для суммирования общего числа в заданном местоположении, мне не разрешается выполнять агрегирование по подзапросу.
sum( CASE WHEN sc.container_class ='carton' and sc.status ='650' and sc.location not in ('CRT2','Z19') and sc.location not like 'AFT%' and sc.location not like 'INT%' THEN 1 ELSE 0 END) 'Loading-Dock',
sum( CASE WHEN sc.container_class ='carton' and sc.status ='650' and (sc.location in ('CRT2','Z19') or sc.location like 'AFT%' or sc.location like 'INT%') THEN 1 ELSE 0 END) 'Loading-Prod',
sum( CASE WHEN sc.container_class ='carton' and sc.status ='650' and sc.location is null THEN 1 ELSE 0 END) 'Loading-No Loc
Исходящие соединения для этого:
shipment_detail sd
left join SHIPMENT_HEADER sh
on sd.SHIPMENT_ID = sh.SHIPMENT_ID
left join SHIPPING_CONTAINER sc
on sc.INTERNAL_SHIPMENT_LINE_NUM = sd.INTERNAL_SHIPMENT_LINE_NUM
left join shipping_container parent
on sc.parent = parent.INTERNAL_CONTAINER_NUM
Этот метод учитывает только факторы в КОНТЕЙНЕРАХ ПОЛНОГО КОНТЕЙНЕРА и ВСЕХ ЛОТОКОВЫХ КОНТЕЙНЕРОВ в конечном итоге в состоянии «Загрузка без местоположения», поскольку уровень КОНТЕЙНЕРА не имеет местоположения.
Я хочу существенно заменить часть SC.LOCATION в моем операторе SUM (CASE на код объединения).
Есть ли способ решить эту проблему?