Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL总和聚合函数给出错误的结果_Sql_Sql Server - Fatal编程技术网

SQL总和聚合函数给出错误的结果

SQL总和聚合函数给出错误的结果,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.

我的数据如下

正确答案是Sum=601050.00

但SQL总和聚合函数给出了错误的答案,即5078150.00000

15000.00
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子句放在同一行上,以便更容易看到哪些子句属于同一行。我不是有意冒犯你,你认为合适的话就把它改回去。主要问题仍然存在,没有任何输入和实际与预期的输出,这个问题是不明确的。