MS SQL循环记录并使用聚合值

时间:2017-06-20 11:35:15

标签: sql sql-server tsql

我正在使用存储过程,其中包含以下代码:

UPDATE s 
SET EstimatedEffort = IsNull(s.EstimatedEffort, 0) + IsNull(sq.EstimatedEffort, 0),
EstimatedValue = IsNull(s.EstimatedValue, 0) + IsNull(sq.EstimatedValue, 0)
FROM #Story s
 JOIN (SELECT ji.ProjectID, 
              ji.ParentIssueID, 
              sum(ji.OriginalEstimate) 
                       * IsNull(pc.OverrideRate, c.DefaultRate) as EstimatedValue, 
              sum(ji.OriginalEstimate) as EstimatedEffort
         FROM JiraIssues ji
              LEFT JOIN ProjectComponents pc 
                   ON ji.ProjectID = pc.ProjectID
                      and ji.ComponentID = pc.ComponentID
              LEFT JOIN Components c 
                   ON ji.ComponentID = c.ComponentID
        WHERE ji.ProjectID = 12
          and ji.JiraIssueTypeID = 2
        GROUP BY ji.ProjectID, 
              ji.ParentIssueID, 
              pc.OverrideRate, 
              c.DefaultRate) sq 

ON s.ProjectID = sq.ProjectID       和s.IssueID = sq.ParentIssueID

在这里,我有一个临时表 #Story ,我试图加入来自子查询的结果。

执行此操作后,我想更新临时表上的两列(EstimatedEffort和EstimatedValue)的值,以便相同ProjectID的所有值都应该相加。我可以填充两列,但是如果子查询结果中的同一ProjectID列有多行,则只有第一行被添加到#Story表中。

有没有办法可以从子查询结果中添加特定ProjectID的所有值,并将它们存储在#Story表中?

1 个答案:

答案 0 :(得分:1)

在子查询中,您按4列分组(ji.ProjectID,ji.ParentIssueID,pc.OverrideRate,c.DefaultRate)。您应该只分组2列 - ji.ProjectID,ji.ParentIssueID。