我需要总结从开始到当前日期但不超出的列中各种项目的出现(有未来的数据) 我的表看起来像这样,我希望最后一列作为每种类型的总和列(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]
我得到了这个输出 - 但它直到本周才计算它们。 (然后下周 - 那周等) 但是当我将它添加到同一个语句时(所以我得到一个日期过滤器)
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()))
所以我再次需要用类型求和,直到当前日期不仅仅是它们的总和。
答案 0 :(得分:0)
您似乎只是想计算TaskSignificance
Application
或Data
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()
。您可以调整日期过滤以满足您的确切需求。