基于其他列的不同值的列的总和

时间:2016-07-04 08:22:25

标签: sql-server sql-server-2008

我在SQL Server中有一个作业工作流表,其中包含页面上的任务start_time和end_time以及该页面的总分。

特定日期的Page start_time和end_time将重复,即员工将在该页面上启动和停止任务多次,如下所示

我的查询

 SELECT DISTINCT tu.user_id,tjd.job_id, tjd.job_case_no,isnull(tu.first_name,tu.user_name)Name,(Count(tjw.total_pages)) total_pages,tjd.job_status_id_fk,tjd.drawing_type_id_fk,SUM(tjw.total_points) Points
         FROM dbo.tbl_job_workflow tjw
         LEFT JOIN dbo.tbl_user tu ON tu.user_id = tjw.user_id_fk
         LEFT JOIN dbo.tbl_job_details tjd ON job_id=job_id_fk
         WHERE isnull(tjd.job_case_no,'')<>'' AND tjw.start_time>='2016-06-28' AND tjw.end_time<='2016-06-28' 
         GROUP BY tjd.job_case_no,tu.first_name,tu.user_name,tu.user_id,tjd.job_id,job_status_id_fk,tjd.drawing_type_id_fk

enter image description here

示例输出

user_id job_id  job_case_no        Name total_pages    Points
 4      298 Testcase_17062016_0244PM    Emp1    1        6
 4      346 TestCase-01                 Emp1    2        4
 27     346 TestCase-01                 Emp2    11       11
 27     350 5435435                     Emp2    1        1
 4      350 5435435                     Emp1    5        5

在以上针对uemployee Emp2的案例TestCase-01的输出中,积分应该是10而不是11

我需要在一天内获得不同页面的点数总和。  即如果一个有4页的工作没有被处理过,第1页有2个点已经在同一天工作了两次,那么那天的积分总和应该是2而不是4

请有人指导我如何根据上述条件获得总和

1 个答案:

答案 0 :(得分:0)

我通过将变量传递给函数

来获取Sum
;WITH CTE_Table 
 AS
 (
      SELECT DISTINCT tjw.total_points,tjw.total_pages
      FROM dbo.tbl_job_workflow tjw WHERE USER_id_fk=@user_id and job_id_fk=@job_id
 ) 

 SELECT SUM(total_points) FROM CTE_Table