Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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_Inner Join - Fatal编程技术网

Sql 混淆求和结果

Sql 混淆求和结果,sql,sql-server,inner-join,Sql,Sql Server,Inner Join,我有三张桌子,如下所示 使用者 状态表 时间跟踪器 其关系如下 用户有username和userid,StatusTable有username和Time\u Tracker有username 下面是我的表格数据 在这里,我想得到总数 问题: 我想通过将案例所有者加入用户名和TT.userId=Users.userId以及登录=GetDate(),将生产时间更新为所用时间[分钟]的总和 我的问题是 update Time_Tracker set ProductionTime = (select

我有三张桌子,如下所示

  • 使用者
  • 状态表
  • 时间跟踪器
  • 其关系如下

    用户有
    username
    userid
    ,StatusTable有
    username
    和Time\u Tracker有
    username

    下面是我的表格数据

    在这里,我想得到总数

    问题:

    我想通过将
    案例所有者
    加入
    用户名
    TT.userId=Users.userId
    以及
    登录=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

    我怎样才能解决这个问题


    谢谢

    我认为子查询中的
    join
    s太多了:

    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);
    
    您的版本是将
    时间跟踪器
    中每一行的结果相乘。关联子句就是您所需要的


    也很重要。这样的相关子查询不应该有
    GROUPBY
    子句。
    groupby
    可以返回多行,但根据定义,相关子查询最多应返回一行。

    我认为子查询中的
    join
    s太多了:

    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);
    
    您的版本是将
    时间跟踪器
    中每一行的结果相乘。关联子句就是您所需要的


    也很重要。这样的相关子查询不应该有
    GROUPBY
    子句。
    分组依据
    可以返回多行,但根据定义,相关子查询最多应返回一行。

    是的,对返回5倍值的查询进行右键操作,以便在更新之前选择值以确保正确。嗨,朋友,感谢此解决方案,这非常有效。另外,我忘了在我的问题中提到,有没有一种方法可以在更新时获取会话元素,比如
    where userid=session element
    @user3872094。我认为你应该把一个新问题作为一个问题而不是在评论中提问。嗨@GordonLinoff,我已经按照你的建议发布了一个新的问题。就在这里,你能看看吗。再次感谢是的,请更正您返回5倍值的查询,以便您可以在更新之前选择值来确保它。嗨,朋友,感谢您提供此解决方案,这非常有效。另外,我忘了在我的问题中提到,有没有一种方法可以在更新时获取会话元素,比如
    where userid=session element
    @user3872094。我认为你应该把一个新问题作为一个问题而不是在评论中提问。嗨@GordonLinoff,我已经按照你的建议发布了一个新的问题。就在这里,你能看看吗。再次感谢