【问题标题】:SQL Sum to column multiple items from start to current dateSQL Sum 从开始到当前日期列多个项目
【发布时间】:2017-04-13 02:40:41
【问题描述】:

我需要将列中从开始到当前日期的各种项目的出现次数相加,但不能超过(有未来数据) 我的表看起来像这样,我希望将最后一列作为每种类型的总和列(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()))

所以我再次需要按 type 求和直到当前日期,而不仅仅是所有这些的总和。

【问题讨论】:

  • 只要使用where taskfinishdate &lt; cast(getdate() as date)
  • 你需要 sum 按类型然后使用 group by type

标签: sql-server


【解决方案1】:

您似乎只是想计算具有TaskSignificanceApplicationData 的行 - 如果我理解正确,那么您可以使用WHERE 子句@987654325 来完成此操作@ 并使用 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 ...。您可以调整日期过滤以满足您的确切需求。

【讨论】:

  • 谢谢!很棒的方法!这就是为什么我喜欢这个论坛 - 真正的专家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多