У меня есть следующая схема и я построил запрос с двумя сводными точками sqlfiddle
select * from
(select * from
(select order_id, product_id, adl_qty, kid_qty, status,
case
when status = 'DUE OUT' and package_name = 'BRF' then 'BRF'
when status = 'ARRIVAL' and package_name IN ('LNC', 'DNR') then package_name
when status = 'STAY OVER' and package_name IN ('BRF', 'LNC', 'DNR') then package_name
--else package_name
end
adl_package,
case
when status = 'DUE OUT' and package_name = 'KIDBRF' then 'KIDBRF'
when status = 'ARRIVAL' and package_name IN ('KIDLNC', 'KIDDNR') then package_name
when status = 'STAY OVER' and package_name IN ('KIDBRF', 'KIDLNC', 'KIDDNR') then package_name
--else package_name
end
kid_package
from orders
left join product_packages using (product_id)
left join packages using (package_id)
order by status, adl_package)
pivot
(
max(adl_qty)
for adl_package in ('BRF' brf, 'LNC' lnc, 'DNR' dnr)
)
)
pivot
(
max(kid_qty)
for kid_package in ('KIDBRF' kidbrf, 'KIDLNC' kidlnc, 'KIDDNR' kiddnr)
)
order by product_id
Проблема в том, что каждая сводная точка создает одну строку (2 строки для каждого order_id), я на самом деле хочуобъединить 2 стержня в 1 ряд.Результат должен выглядеть следующим образом:
ORDER_ID PRODUCT_ID STATUS BRF LNC DNR KIDBRF KIDLNC KIDDNR
-------- ---------- ------ --- --- --- ------ ------ ------
1 2 DUE OUT 1
2 3 ARRIVAL 2 2 1 1
3 3 STAY OVER 1 1 1 2 2 2
Спасибо за вашу помощь.