令人困惑的总和结果

时间:2016-08-31 11:23:19

标签: sql sql-server inner-join

我有以下3个表格。

  1. 用户
  2. StatusTable
  3. Time_Tracker
  4. 关系如下。

    用户有usernameuserid,StatusTable有userName,而Time_Tracker有userName

    下面是我的表数据。

    在这里,我试图获得总和

    enter image description here

    问题:

    我想通过加入productiontime加入time taken[minutes]case owner以及username TT.userId = Users.userId更新为login = GetDate()的总和>

    我的查询

    update Time_Tracker set ProductionTime = (select sum(ST.[time taken(minutes)])
    from statustable as st inner join users as u 
    on st.[case owner] = u.username
    inner join Time_Tracker as TT
    on u.userId = TT.userId
    where cast(st.[Start Time] AS DATE) = CAST(GETDATE() as Date)
    Group By TT.UserId, u.UserId) where CAST(Login AS DATE) = CAST(GETDATE() as Date)
    

    我图像中的蓝框是我当前的O / p。

    当我跑步时

    select sum([time taken(minutes)]) as totalTme from StatusTable where cast([Start Time] AS DATE) = CAST(GETDATE() as Date)
    

    我将O / p视为2.05,这是正确的。

    请在第一次查询(打印10.25)而不是2.05时告诉我出错的地方。

    我该如何解决这个问题。

    由于

1 个答案:

答案 0 :(得分:2)

我认为子查询中有太多join个:

update Time_Tracker tt
    set ProductionTime = (select sum(ST.[time taken(minutes)])
                          from statustable st inner join
                               users u 
                               on st.[case owner] = u.username
                          where u.userId = tt.userId and
                                cast(st.[Start Time] AS DATE) = CAST(GETDATE() as Date)
                         )
    where CAST(Login AS DATE) = CAST(GETDATE() as Date);

您的版本乘以TimeTracker中每行的结果。相关条款是你需要的。

同样非常重要。这样的相关子查询不应该有GROUP BY子句。 GROUP BY可以返回多行,但根据定义,相关子查询最多应返回一行。