Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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,我试图计算每个用户的总培训小时数。 课程类型可以是1型,也可以是2型 我的问题是课程时间被重复计算,总共10小时。请查看我的预期结果下面的更多信息 SELECT userid, training1.coursehours + training2.coursehours As totalhours from user left join (select sum(hours) as coursehours, userid from usercourses inner

我试图计算每个用户的总培训小时数。 课程类型可以是1型,也可以是2型 我的问题是课程时间被重复计算,总共10小时。请查看我的预期结果下面的更多信息

SELECT userid, training1.coursehours + training2.coursehours As totalhours
from user left join     
     (select sum(hours) as coursehours, userid
      from usercourses inner join
           courses
           on courses.courseid = usercourses.courseid
      where coursetype=1
      group by userid
     ) training1 left join
     (select sum(hours) as coursehours, userid
      from usercourses inner join
           courses
           on courses.courseid = usercourses.courseid
      where coursetype=2
      group by userid
     ) training2
让我们假设课程123是5小时,类型为1和2,这使得它有资格出现在左侧和右侧。预期结果应为:

UserID     TotalHours
546           5
其他信息。 UserCourses表的数据:

userid   CourseID  
546      123
courseid  coursetypeid   hours
123          1            5
123          2            5
课程表数据:

userid   CourseID  
546      123
courseid  coursetypeid   hours
123          1            5
123          2            5

您只需要条件聚合吗

select uc.user_id,
       sum(case when uc.coursetype = 1 then c.hours end) as hours_1,
       sum(case when uc.coursetype = 2 then c.hours end) as hours_2,
       sum(hours) as total_hours
from usercourses uc inner join
     courses c
     on c.courseid = uc.courseid
group by uc.user_id;

如果有许多用户没有任何时间,则只需
左键联接
用户
表。

请标记您正在使用的DBMS。如果表中有示例数据,则会有所帮助。此SQL代码应该出错吗
form user
@JesseLi I添加了示例数据如果topicstarter数据只有两种coursetype类型,他可以选择将其优化为
选择sum(小时)作为总小时数,sum(当uc.coursetype=1时,则为uc.hours end)作为小时数1,(sum(小时)-sum(当uc.coursetype=1时,则为uc.hours end时)假设topicstarters RDMS将聚合计算缓存为优化器/执行部分中的常量,则。。