这是我的查询
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行,而不是对每一行求和。
答案 0 :(得分:0)
考虑使用分析而不是子查询。
更新:
。
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];