SQL Sum从开始到当前日期列出多个项目

时间:2017-04-13 02:40:42

标签: sql-server

我需要总结从开始到当前日期但不超出的列中各种项目的出现(有未来的数据) 我的表看起来像这样,我希望最后一列作为每种类型的总和列(Applicaiton In

|Task Name|Finish Date| Type|Planned|
|Equate   |1/2/17     | App |1
|TSquare  |2/7/17     | App |2
|Smart    |3/1/17     | Data |1

当我不使用"直到本周"过滤每个人都很棒

     Select sum (case when 
    Tt.[TaskPercentCompleted] < 100 and Tt.[Task_Significance] like 'Application' 
    Or Tt.[TaskPercentCompleted] < 100 and Tt.[Task_Significance] like 'Data' 
  then 1 else 0 end) as [Planned]
 From [Some table]

我得到了这个输出 - 但它直到本周才计算它们。 (然后下周 - 那周等) enter image description here 但是当我将它添加到同一个语句时(所以我得到一个日期过滤器)

 Select sum(case when 
     [Task_Significance] like 'Application' 
     Or
     [Task_Significance] like 'data' 
     then 1 else 0 end)  over (order by [taskfinishdate] rows unbounded preceding) as Planned
From [Some table]
where
[taskfinishdate] <= DATEADD(DAY, 8-DATEPART(DW, GETDATE()), Convert(date,getdate()))

enter image description here

所以我再次需要用类型求和,直到当前日期不仅仅是它们的总和。

1 个答案:

答案 0 :(得分:0)

您似乎只是想计算TaskSignificance ApplicationData WHERE的行 - 如果我理解正确的那么你就可以用GROUP BY条款,COUNT并使用SUM代替SELECT COUNT(1) AS Planned FROM SomeTable WHERE TaskFinishDate < GETUTCDATE() AND TaskSignificance IN('Application', 'Data') GROUP BY TaskSignificance;

WHERE

日期过滤由COUNT子句处理,over (order by ...不关心行的顺序,因此在这种情况下不需要窗口函数,即transform3d()。您可以调整日期过滤以满足您的确切需求。