SQL总和聚合函数给出错误的结果
我的数据如下 正确答案是Sum=601050.00 但SQL总和聚合函数给出了错误的答案,即5078150.00000 15000.00SQL总和聚合函数给出错误的结果,sql,sql-server,Sql,Sql Server,我的数据如下 正确答案是Sum=601050.00 但SQL总和聚合函数给出了错误的答案,即5078150.00000 15000.0027950.0024750.0011550.007400.007500.0014650.0012500.0032800.0035700.0094100.0010100.0019700.0022100.0035450.0028050.0050150.0013800.003600.0018600237200.0021600.007700.004500.002500.
27950.00
24750.00
11550.00
7400.00
7500.00
14650.00
12500.00
32800.00
35700.00
94100.00
10100.00
19700.00
22100.00
35450.00
28050.00
50150.00
13800.00
3600.00
18600
237200.00
21600.00
7700.00
4500.00
2500.00
select sum(SO_SalesOrder.OrderTotal),l.Name as [Store Name]
From SO_SalesOrder inner join BASE_Location l on
SO_SalesOrder.LocationId = l.LocationId
inner join SO_SalesOrder_Line on SO_SalesOrder.SalesOrderId =
SO_SalesOrder_Line.SalesOrderId
inner join BASE_Product on BASE_Product.ProdId =
SO_SalesOrder_Line.ProdId
inner join BASE_Category on BASE_Category.CategoryId =
BASE_Product.CategoryId
where SO_SalesOrder.OrderDate >= '2018-02-01' and
SO_SalesOrder.OrderDate <= '2018-02-28' and BASE_Category.Name = '1MHNZ'
group by l.Name
选择sum(SO_SalesOrder.OrderTotal),l.Name作为[商店名称]
从SO_SalesOrder内部联接基础位置l开始
SO_SalesOrder.LocationId=l.LocationId
SO_SalesOrder.SalesOrderId=
所以SalesOrder Line.SalesOrderId
基本产品上的内部联接基本产品。ProdId=
SO\u SalesOrder\u Line.ProdId
基本类上的内部联接基本类。类别ID=
基本产品类别ID
其中SO_SalesOrder.OrderDate>=“2018-02-01”和
因此_SalesOrder.OrderDate您的一个(或多个)联接可能有问题,可能您有重复的行或联接条件不正常
删除按l.Name分组
,SUM()
聚合,并查看SO\u SalesOrder.OrderTotal
的返回值是否符合您的预期(您可能需要在WHERE
子句中使用特定的l.Name
进行筛选)。您很可能会看到重复的金额,或者在达到值601050.00
时未考虑的金额
如果是这样的话,试着把表一个接一个地连接起来,看看是哪些表让你的行变成了comando。在我看来,你的问题取决于查询的逻辑
在SO\u SalesOrder
和SO\u SalesOrder\u行
之间有一个主-详细关系,由SalesOrderId
列连接
因此,如果您的订单中有三行,那么您将把相同的OrderTotal
相加三倍
试试这样的方法:
select sum(SO_SalesOrder.OrderTotal) Total, l.Name as [Store Name]
From SO_SalesOrder
join BASE_Location l on SO_SalesOrder.LocationId = l.LocationId
where SO_SalesOrder.OrderDate >= '2018-02-01' and SO_SalesOrder.OrderDate <= '28-02-2018'
and exists (
select 0 x
From SO_SalesOrder_Line
join BASE_Product on BASE_Product.ProdId = SO_SalesOrder_Line.ProdId
join BASE_Category on BASE_Category.CategoryId = BASE_Product.CategoryId
where BASE_Category.Name = '1MHNZ'
and SO_SalesOrder_Line.SalesOrderId = SO_SalesOrder.SalesOrderId
)
group by l.Name
选择sum(SO_SalesOrder.OrderTotal)总计,l.名称为[门店名称]
来自SO_销售订单
在SO\U SalesOrder.LocationId=l.LocationId上加入基本位置
其中SO_SalesOrder.OrderDate>='2018-02-01'和SO_SalesOrder.OrderDate有什么问题以及期望的结果是什么?如果您创建一个简单的示例,它可以帮助您找到错误,也可以帮助其他人帮助您。我们无法运行您的查询,也不知道您期望的结果或您得到的结果。您需要提供DDL、可消耗的样本数据(这说明了问题)和预期结果。编辑您的问题并添加样本数据和预期结果,因为我们不知道您的答案data@Larnu-编辑主要是将分组的where子句放在同一行上,以便更容易看到哪些子句属于同一行。我不是有意冒犯你,你认为合适的话就把它改回去。主要问题仍然存在,没有任何输入和实际与预期的输出,这个问题是不明确的。