2017-06-20 42 views
0

我正在与具有一段代码如下存储过程工作:通过记录和更新列MS SQL环与聚合值

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

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

+0

但是我必须将它保留在Group By子句中,否则会出现错误“列”ProjectComponents.OverrideRate“在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 – shivam

+0

试试这个 sum(ji.OriginalEstimate * IsNull(pc.OverrideRate,c.DefaultRate))作为EstimatedValue, – siwym

+0

是的,工作!谢谢! – shivam