У меня проблема в том, что мне не удается реализовать внешнее соединение в коде SQL.Я хочу, чтобы месяцы без дохода отображались в таблице как «0» или как «ноль».Это должно быть сделано с помощью внешнего соединения.
with cte1 as (
select *
from (Values
(1, 'jan'),
(2, 'feb'),
(3, 'mar'),
(4, 'apr'),
(5, 'may'),
(6, 'jun'),
(7, 'jul'),
(8, 'aug'),
(9, 'sep'),
(10, 'oct'),
(11, 'nov'),
(12, 'dec')
) as T(monthnr, maand))
--This part calculates the monthly revenue (maand = month)
select x.regioncode, x.city, x.maand, x.monthlyrevenue, y.totalrevenue
from (
select v.regioncode, city, maand, COALESCE(SUM(oa.amount * pp.price), 0) as monthlyrevenue
from salesregion s
join employee e
on s.regionmgr = e.employeeID
join customer c
on left(c.postalcodehousenumber, 4) between s.pcbegin and s.pcend
join orders o
on o.customerID = c.customerID
join orderamount oa
on oa.orderid = o.orderid
join productprice pp
on pp.productid = oa.productid
join cte1
on month(orderdate) = monthnr
where (o.orderdate > pp.begindate and o.orderdate < pp.enddate) and year(orderdate) = 2014
group by regioncode, city, maand) x
CROSS JOIN
(--This code calculates the total revenue per city.
select city, SUM(oa.amount * pp.price) as totalrevenue
from salesregion s
join employee e
on s.regionmgr = e.employeeID
join customer c
on left(c.postalcodehousenumber, 4) between s.pcbegin and s.pcend
join orders o
on o.customerID = c.customerID
join orderamount oa
on oa.orderid = o.orderid
join productprice pp
on pp.productid = oa.productid
where (o.orderdate > pp.begindate and o.orderdate < pp.enddate) and year(orderdate) = 2014
group by city
)y
where x.city = y.city
Я выяснил, что внешнее соединение должно быть реализовано в верхней части детали с помощью перекрестного соединения, поскольку верхняя часть вычисляетежемесячный доход.Однако любая попытка реализовать внешнее соединение либо приводит к неудаче, либо дает неверные значения.
То, что я сейчас получаю, можно увидеть на изображении ниже.Слева направо на изображении: Код региона, город, месяц, доход, общая сумма дохода .
В результате я пытаюсь отобразить все месяцы для каждого города,даже если у них не было никакого дохода в этом месяце.В настоящее время отображаются только месяцы с доходом в этом месяце (я хочу, чтобы он отображал город: Erp, месяц: январь, доход: либо «0», либо «ноль». текущий результат