在视图中聚合列

时间:2013-07-21 07:39:32

标签: sql-server sql-server-2012

我的桌子上有“HoursCompleted”,每天计算一次。

CREATE TABLE MyTable
(
    Id INT NOT NULL IDENTITY(1,1),
    PersonId INT NOT NULL,
    DateValue DATE NOT NULL,
    HoursToday DECIMAL(3,2) NOT NULL
)

我需要做的是创建一个显示这些字段的视图,以及TotalHoursForPerson。

所以,我可以从View中选择,其中PersonId = x,然后返回:

Id|PersonId|DateValue|HoursToday|Total
1,1,'01-JAN', 5, 5
2,1,'02-JAN', 8, 13
3,1,'03-JAN', 2, 15
etc
etc

但我不确定我是否可以获得“完整”专栏。

1 个答案:

答案 0 :(得分:2)

您尝试实现累积总和,这是一种简洁有效的方法:

CREATE VIEW YourView
AS
SELECT Id, PersonId, DateValue, HoursToday, 
       SUM(HoursToday) OVER (PARTITION BY PersonId ORDER BY Id /* or date */) AS Total
FROM MyTable

然后,查询视图:

SELECT * FROM YourView WHERE PersonId = 42