我的数据如下:
正确答案是Sum = 601,050.00
但SQL sum聚合函数给出了错误的答案,即5078150.00000
15,000.00
27,950.00
每年24,750.00¥11,550.00¥7,400.00¥7,500.00¥14,650.00¥12,500.00¥32,800.00
35,700.00 < br /> 94,100.00
10,100.00
19,700.00
22,100.00
35,450.00
28,050.00
50,150.00¥69,750.00
13,800.00
3,600.00 < br /> 18,600.00
2,350.00
¥7,200.00
21,600.00
7,700.00
4,500.00
2,500.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
答案 0 :(得分:1)
您的一个(或多个)联接可能存在问题,可能是您有重复的行或者加入条件不正常。
删除group by l.Name
,SUM()
聚合,看看SO_SalesOrder.OrderTotal
的返回值是否与您期望的一样(您可能需要使用特定{{1}进行过滤在l.Name
子句中。您很可能会看到重复的金额,或者在到达值WHERE
时未考虑的金额。
如果是这样,请尝试逐个加入表格,看看哪些表格会让你的行变为comando。
答案 1 :(得分:1)
在我看来,你的问题取决于查询的逻辑。
SO_SalesOrder
和SO_SalesOrder_line
加入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
P.S。 还要检查日期列,如果它们还包含时间分数,则应重新考虑上限过滤器。
我建议您使用and SO_SalesOrder.OrderDate < '01-03-2018'
代替&lt; = 28-02