sql查找每条记录的运行总计

时间:2015-07-24 17:38:54

标签: sql sql-server

这是我的查询

SELECT 
B.name,B[work_date],B.work_day,B[start_week],B.hours,B.prjname,
B.prj_number,
(SELECT SUM(A.hours) FROM  [timesheet] A WHERE A.[local_date]<=B.[local_date] 
 AND B.name=A.name AND A.[start_week]=B.[start_week] 
)cumulative
FROM [timesheet] 
ORDER BY B.name,B.work_date,B.prj_number

所以我得到了这个

Name    Work_date   Work_day    start_week  hours   Cumulative  PrjName PrjNumber
James   7/13/15     Mon          7/13/15    5.5     12          ProjectA    1
James   7/13/15     Mon          7/13/15    4.25    12          Project B   2
James   7/13/15     Mon          7/13/15    2.25    12          Project C   3

我没有完成,对不起 我想补充一点,就是你看到了累积,它添加了所有3行,而不是对每一行求和。

2 个答案:

答案 0 :(得分:0)

考虑使用分析而不是子查询。

更新:

  1. 补充道。许多选择陈述中的b之后。
  2. 使用分析来获取每个日期/名称分组的总数
  3. 使用convert来获取work_date的日期部分,因为它有一个时间组件。
  4. SELECT B.name,
           B.[work_date],
           B.work_day,
           B.[start_week],
           B.hours,
           B.prjname,
           B.prj_number, 
           SUM(A.hours) over (partition by B.name,CONVERT(date, B.[work_date])) 
    cumulative
    FROM [timesheet] 
    ORDER BY B.name,
             B.work_date,
             B.prj_number
    

答案 1 :(得分:0)

我相信这对你有用:

SELECT 
     q1.[NAME]
    ,q1.[work_date]
    ,q1.[work_day]
    ,q1.[start_week]
    ,q1.[hours]
    ,q1.[prjname]
    ,q1.[prj_number]
    ,sum(q2.hours) as cumulative

FROM
[timesheet] q1
JOIN timesheet q2 on q1.prj_number+1 > q2.prj_number --the trick is right here 
GROUP BY 
     q1.[NAME]
    ,q1.[work_date]
    ,q1.[work_day]
    ,q1.[start_week]
    ,q1.[hours]
    ,q1.[prjname]
    ,q1.[prj_number]
ORDER BY q1.[name], 
         q1.[work_date],
         q1.[prj_number];

SQL Fiddle Demo