У меня проблемы с моим запросом SQL. Я использую старую базу данных Northwind.
Мне нужно написать запрос, который покажет мне общий баланс между странами, ВСЕМИ странами.
Пока у меня есть что-то подобное:
SELECT
MAX(ca.CountryName) as CountryA,
MIN(cb.CountryName) as CountryB,
SUM((case when ca.CountryName < cb.CountryName then -1 else 1 end) * CONVERT(money, (od.UnitPrice * od.Quantity) * (1 - od.Discount) / 100) * 100) as Balance
FROM Orders o
INNER JOIN [Order Details] od on o.OrderID=od.OrderID
INNER JOIN Products p on p.ProductID = od.ProductID
INNER JOIN Suppliers s on s.SupplierID = p.SupplierID
INNER JOIN Customers c on o.CustomerID = c.CustomerID
INNER JOIN Countries ca ON ca.CountryID = s.CountryID
INNER JOIN Countries cb ON cb.CountryID = c.CountryID
WHERE NOT cb.CountryName = ca.CountryName
GROUP BY (case when ca.CountryName < cb.CountryName then ca.CountryName+' to '+cb.CountryName else cb.CountryName+' to '+ca.CountryName end)
ORDER BY CountryA, CountryB
Проверив пару раз, я обнаружил пару ошибок, которые мешают мне закончить работу.
Страны, расположенные после CountryA в алфавитном порядке, всегда имеют отрицательный баланс. Я ошибся в строке SUM (...), но я не уверен, как это исправить?
Как я могу изменить этот запрос, который покажет мне правильный баланс между странами?
Страна A - Страна B --- (общий баланс сделок A-> B и B-> A)
Диаграмма используемой мной базы данных, плюс есть две пользовательские таблицы.
Country
CountryID, CountryName, ContinentID
Continents
ContinentID, ContinentName
Результат я получаю прямо сейчас:
Australia Sweden -7626.86
Australia Switzerland -7245.20
Australia UK -7672.98
Australia USA -34848.87
Australia Venezuela -7953.09
Brazil Austria 1216.80
Brazil Belgium 54.00
Brazil Mexico -148.50
Brazil Poland -54.00
Brazil Portugal -36.00
То, что я ожидаю, чтобы приблизиться к этому:
Australia Sweden -7626.86
Australia Switzerland 7245.20
Australia UK -7672.98
Australia USA 34848.87
Australia Venezuela 7953.09
Brazil Austria 1216.80
Brazil Belgium 54.00
Brazil Mexico 148.50
Brazil Poland -54.00
Brazil Portugal 36.00
Правильные значения, минус только в тех случаях, когда это оправдано, нет США - США - 6000, нет двойных значений.