2017-06-20 40 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