2014-08-28 22 views
0

我有一個查詢,看起來像下面的總和:TSQL獲得的2項獨立的罪名

IF (@action = 'topDepartments') 
       BEGIN 
        SELECT TOP 50 E.[DepartmentDesc] AS department, 
            COUNT(N.[nomineeQID]) AS totalNominations, 
            COUNT(S.[subQID]) AS totalSubmissions 
        FROM  empTable AS E 
          LEFT OUTER JOIN 
          empowermentSubmissions AS S 
          ON E.[qid] = S.[subQID] 
          LEFT OUTER JOIN 
          empowermentSubmissions AS N 
          ON E.[qid] = N.[nomineeQID] 
        WHERE N.[statusID] = 3 
          AND N.[locationID] = @locale 
        GROUP BY E.[DepartmentDesc] 
        ORDER BY totalSubmissions DESC 
        FOR  XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root'); 
       END 

一切是偉大的工作吧,但是我想作爲總計然後順序加在一起兩個計數它由總數。

我給這是一個嘗試,但我一直得到錯誤

不能對包含聚合或子查詢的表達式執行聚合函數。

有沒有需要完成的具體方法?

回答

2

如果在正在分組的查詢中,並且想要使用聚合值,請將整個聚合函數視爲該列,即COUNT(N.[nomineeQID])是一列。所以在你的情況下,只需將2個聚合添加到一起進行計算。

IF (@action = 'topDepartments') 
       BEGIN 
        SELECT TOP 50 E.[DepartmentDesc] AS department, 
            COUNT(N.[nomineeQID]) AS totalNominations, 
            COUNT(S.[subQID]) AS totalSubmissions, 
            COUNT(N.[nomineeQID]) 
            + COUNT(S.[subQID]) AS ALLSubmissions 
        FROM  empTable AS E 
          LEFT OUTER JOIN 
          empowermentSubmissions AS S 
          ON E.[qid] = S.[subQID] 
          LEFT OUTER JOIN 
          empowermentSubmissions AS N 
          ON E.[qid] = N.[nomineeQID] 
        WHERE N.[statusID] = 3 
          AND N.[locationID] = @locale 
        GROUP BY E.[DepartmentDesc] 
        ORDER BY totalSubmissions DESC 
        FOR  XML PATH ('data'), TYPE, ELEMENTS, ROOT ('root'); 
       END 

順便說一句,它可能看起來「貴」當我們編寫查詢這樣,不過一般優化承認,它可以重複使用的計算,所以它真的不是那麼糟糕,因爲它可能看起來。

+0

工作完美;我很感激! – SBB 2014-08-29 16:32:59