Моя проблема в том, что правильное объединение не работает, я думаю, из-за используемых псевдонимов.
Я прокомментировал строки, использующие -, чтобы указать линии, которые, скорее всего, вызывают проблему.Если я запускаю часть кода Cross Join отдельно, он работает нормально.
Если я добавляю перекрестное соединение, как показано ниже, а затем выполняю правое соединение с таблицей final_leg a Я получаю сообщение об ошибке, в котором говорится, что "отношение" k "не существует".
kэто псевдоним, который я использую в последнем операторе select для вызова части соединения CROSS таблицы.
WITH final_leg AS(
SELECT y.*
FROM
(
SELECT
y.shipment_id,
y.route_id,
max(leg_sequence_id) max_leg_sequence_id
FROM posimorders.sc_execution_eu.o_detailed_routes_v2 y
group by
1,2
) AS x
INNER JOIN posimorders.sc_execution_eu.o_detailed_routes_v2 y
on x.route_id = y.route_id and x.shipment_id = y.shipment_id and y.leg_sequence_id = x.max_leg_sequence_id
),
dest_leg AS(
SELECT y.*
FROM
(
SELECT
y.shipment_id,
y.route_id,
min(leg_sequence_id) max_leg_sequence_id
FROM
posimorders.sc_execution_eu.o_detailed_routes_v2 y
LEFT JOIN warehouse_attributes w -- Joining to add origin country of origin FC
ON w.warehouse_id = y.leg_warehouse_id
group by
1,2
) x
INNER JOIN posimorders.sc_execution_eu.o_detailed_routes_v2 y
on x.route_id = y.route_id and x.shipment_id = y.shipment_id and y.leg_sequence_id = x.max_leg_sequence_id
),
list_legs_ds AS(
SELECT t1.*, t2.* FROM
(SELECT leg_warehouse_id, SUM(pck_count) AS total_packages
FROM posimorders.sc_execution_eu.o_detailed_routes_v2
WHERE trunc(cpt_date) between '2019-06-16' and '2019-06-22'
and leg_sequence_id = 0
and leg_warehouse_id not like 'X%'
and right(leg_warehouse_id,1) in ('1','2','3','4','5','6','7','8','9') --Only SC and not Airports
group by 1
having sum(pck_count) > 50000
) t1
CROSS JOIN
(select distinct leg_warehouse_id AS lm_ds , destination_country_code
from posimorders.sc_execution_eu.o_detailed_routes_v2
where trunc(cpt_date) BETWEEN '2019-06-16' and '2019-06-22'
and leg_ship_method LIKE 'AMZN_%_PRIME'
) t2
)
SELECT
a.route_warehouse_id,
--k.leg_warehouse_id leg_ware,
--k.leg_warehouse_id lm_ds,
from
final_leg a
inner join dest_leg b
on a.shipment_id = b.shipment_id and a.route_id = b.route_id
--RIGHT JOIN list_legs_ds k
--on a.leg_warehouse_id = k.leg_ware -- and a.leg_ship_method = k.last_ds