WITH
O_FIELDS(
ZONE_NUM,
DETAIL_LINE_ID,
CUSTOMER,
DESTNAME,
FREIGHT_BILL,
STATUS,
WEIGHT,
START_ZONE,
END_ZONE,
BILL_DATE,
DELIVER_BY,
ACTUAL_DELIVERY
) AS (
SELECT
case
when O.END_ZONE = 'ONBUR' then '1'
when O.END_ZONE = 'ONHAM' then '1'
when O.END_ZONE = 'ONSTON' then '1'
when O.END_ZONE = 'ONBRAM' then '2'
when O.END_ZONE = 'ONCAM' then '2'
when O.END_ZONE = 'ONETO' then '2'
when O.END_ZONE = 'ONGEOR' then '2'
when O.END_ZONE = 'ONEGU' then '2'
when O.END_ZONE = 'ONMIS' then '2'
when O.END_ZONE = 'ONNAN' then '2'
when O.END_ZONE = 'ONREX' then '2'
when O.END_ZONE = 'ONBOL' then '3'
when O.END_ZONE = 'ONCON' then '3'
when O.END_ZONE = 'ONKIT' then '3'
when O.END_ZONE = 'ONRIC' then '3'
when O.END_ZONE = 'ONSCA' then '3'
when O.END_ZONE = 'ONWOOD' then '3'
when O.END_ZONE = 'ONWOODB' then '3'
when O.END_ZONE = 'ONHARR' then '4'
when O.END_ZONE = 'ONKIN' then '4'
when O.END_ZONE = 'ONKINGS' then '4'
when O.END_ZONE = 'ONNEW' then '4'
when O.END_ZONE = 'ONSTT' then '4'
when O.END_ZONE = 'ONWIN' then '4'
when O.END_ZONE = 'ONUTOP' then '4'
when O.END_ZONE = 'MIMELV' then '4'
else O.END_ZONE end as ZONE_NUM,
O.DETAIL_LINE_ID,
O.CUSTOMER,
O.DESTNAME,
O.BILL_NUMBER AS FREIGHT_BILL,
O.CURRENT_STATUS AS STATUS,
O.WEIGHT,
O.START_ZONE,
O.END_ZONE,
O.BILL_DATE,
O.DELIVER_BY,
O.ACTUAL_DELIVERY
FROM TLORDER O
WHERE CUSTOMER IN ('CPR-CONTRA','CPZONE4')
AND O.BILL_DATE BETWEEN TIMESTAMP (CAST(? AS CHAR(14))) AND (TIMESTAMP (CAST(? AS CHAR(14))) + 1 month - 1 second)
AND INTERFACE_STATUS_F IS NOT NULL
ORDER BY FREIGHT_BILL
),
T_SUBSET(key, val, rnum) AS
(
SELECT DETAIL_NUMBER , TRACE_NUMBER, row_number() over(partition by DETAIL_NUMBER)
FROM Trace
WHERE DETAIL_NUMBER IN (
SELECT DETAIL_LINE_ID FROM O_FIELDS
)
AND TRACE_TYPE='1'
),
T_RECURSE(key, str, cnt, cnt_max) AS
(
SELECT key, VARCHAR('', 1000), 0, MAX(rnum) FROM T_SUBSET GROUP BY key
UNION ALL
SELECT T_RECURSE.key, T_RECURSE.str || RTRIM(CHAR(T_SUBSET.val)) || ' ', T_RECURSE.cnt + 1, T_RECURSE.cnt_max
FROM T_SUBSET, T_RECURSE
WHERE T_SUBSET.key = T_RECURSE.key AND
T_SUBSET.rnum = T_RECURSE.cnt + 1 AND
T_RECURSE.cnt < T_RECURSE.cnt_max
)
SELECT
O.ZONE_NUM,
O.CUSTOMER,
O.DESTNAME,
O.FREIGHT_BILL,
O.STATUS,
O.WEIGHT,
O.START_ZONE,
O.END_ZONE,
O.BILL_DATE,
O.DELIVER_BY,
O.ACTUAL_DELIVERY,
T.STR AS CARS
FROM O_FIELDS O
LEFT OUTER JOIN T_RECURSE T ON O.DETAIL_LINE_ID = T.KEY
WHERE (T.CNT_MAX = T.CNT OR T.CNT IS NULL)
ORDER BY ZONE_NUM, FREIGHT_BILL