使用SUM返回的数据看起来不正确

时间:2012-10-09 10:12:03

标签: sql sql-server

我之前使用过这里的答案来回答我的问题,但我找不到这个问题的答案。

我正在编写一个需要提取驱动程序产生的丢弃量的查询。相当直接,但是我需要将它们添加到一起以提供总计,但是当我使用SUM功能时它不会返回正确的信息。

在桌子上Journey Header是一个包含Drop of Drop的列,我需要将它们添加到总数中,但它需要我的查询来显示驱动程序,车辆,Drops总数和订单值,但我不想要每个单独的记录,我希望它们都组合在一起,如果这是有意义的......

下面是我正在使用的脚本以及下面结果的一部分 - 例如我希望驱动程序Chris Akwuba显示一行,他已经完成了总量以及订单值(订单值正在运行)

谢谢你,我希望你能理解我的漫无边际......

select
sum(JH.NoofDrops) as [Number of Drops],
Jh.JourneyID,
JH.DriverName as [Driver],
VT.Name as [Vehicle Class],
SUM (OH.TotalSellPrice) as [Order Value]
from JourneyHeader JH with (NOLOCK)
LEFT JOIN VehicleType VT with (NOLOCK) on VT.VehicleTypeID=JH.VehicleTypeID
LEFT JOIN JourneyLine JL with (NOLOCK) on JL.JourneyID=JH.JourneyID
LEFT JOIN Orderheader OH with (NOLOCK) on OH.OrderID=JL.OrderID
where 
JourneyDate between '2012-06-01 00:00:00' and '2012-07-20 00:00:00'
Group by JH.DriverName, VT.Name, Jh.NoOfDrops, JH.JourneyID

Number of Drops JourneyID     Driver         Vehicle Class  Order Value
25          14520             Chris Akwuba       Transit            2533.32
1           14521             Kevin O'Sullivan   Hiab (Class2)  214.15
16          14522             Kevin O'Sullivan   Hiab (Class2)  1672.29
9           14523             Chris Akwuba       Transit            1136.69
16          14525             James O'Brien      7.5 tonne          633.18
9           14526             Errol Gray         Transit            768.17
25          14527             John Hardy         Transit            969.80

2 个答案:

答案 0 :(得分:2)

Jh.NoOfDrops, JH.JourneyIDJourneyID中删除select 例如

Group by JH.DriverName, VT.Name

答案 1 :(得分:2)

即使如果你编写了正确的SQL,你的结果也总是不正确的。由于您添加了with (NOLOCK)提示,因此您要求执行脏读操作,以获得不一致的数据。请参阅Previously committed rows might be missed if NOLOCK hint is used

现在,如果你愿意放弃'gimme错误结果'的暗示,那么你就有了机会。但为了实现这一点,您的要求不得与自己相矛盾。当您说I want the driver Chris Akwuba to show one line时,您显然无法要求JourneyID列。你必须下定决心,每个旅程一行每行一行。不是都。一旦你解决了其中一个问题,请重新提问。