Sql 正在修复总余额查询
我的SQL查询有问题。我正在使用一个旧的Northwind数据库。 我需要写一个查询,它将显示国家之间的总余额,所有国家 到目前为止,我有这样的想法:Sql 正在修复总余额查询,sql,sql-server,northwind,Sql,Sql Server,Northwind,我的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.UnitPri
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
我现在得到的结果是:
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
正确的值,只有在正确的情况下才减号,没有USA-USA-6000,没有双倍。你的总和基本上是2部分的乘法,当ca.CountryName为了给出一个合适的求和表达式以满足您的需要,我们需要查看底层数据,以了解如何构建此类表达式,以及您的业务逻辑,金额何时应显示为负数,何时显示为正数?同时指定预期结果。@jarlh我已更新了帖子。不确定我是否解释正确。我需要数一数,每个国家从每个国家出售和购买了多少,以及它们是否在正负上。并不是每个国家都是生产者,也不是每个国家都是消费者。样本数据和期望的结果确实会有所帮助。按国家名称的相对顺序对变量求和不会让我想起现实世界中的问题,因此很难找出您真正想要实现的目标。@GordonLinoff很难提供它们,因为我不确定我现在掌握的数字是否正确。我添加了数据库的图表,可能会有所帮助。再次,解释一下我现在的情况:-拥有相应客户国的生产国列表以及它们之间的平衡。-余额是正确计算的,但如果CountryB按字母顺序高于CountryA,则余额始终为正值;如果CountryB低于CountryA,则余额始终为负值。我需要:-正确计算总平衡,按字母顺序,正确显示是否为正或负。嘿,谢谢你的帮助。这些信息证实了我的猜测。所以,为了创造一个正确的总数,我们需要计算CountryA生产了多少产品,他们向不同国家销售了多少产品,以及他们从其他国家购买了多少产品。当他们购买的数量大于他们生产的数量时,金额应为负值;当他们生产的数量大于他们购买的数量时,金额应为正值。您希望我提供的确切数据是什么?这是一个旧的Northwind数据库,所以我可以发送所有内容。而且,数字是正确的,所以求和表达式的第一部分需要一个fixFilter,用于您所在的WHERE中的country Australia vs USA,并删除所有GROUP BY和aggregate表达式,然后验证每列的数据,确保从澳大利亚到美国的最终金额不应为负值。我认为主要问题是,我的计算是基于ca.CountryName
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