2015-10-14 122 views
0

我有下面的查詢,我試圖總結一下,我得到兩行,每個查詢的每一個總和,有無論如何添加兩個總和,所以一行總數是兩個查詢的返回值?謝謝你在前進將兩個SQL查詢合併爲一個

SELECT count(*) 

    FROM 
     eUser eUser2 RIGHT OUTER JOIN prcIncidentManagement ON (eUser2.eUserName=prcIncidentManagement.AssignedTo) 
     INNER JOIN eFolder ON (prcIncidentManagement.EFOLDERID=eFolder.eFolderID) 
    WHERE 
    eFolder.eCreationTime between '01/01/2015' and '13/10/2015' 
    union 
    SELECT count(*) 
    FROM 
     eUser RIGHT OUTER JOIN prcRequestFulfilment ON (prcRequestFulfilment.AssignedTo=eUser.eUserName) 
     INNER JOIN eFolder ON (eFolder.eFolderID=prcRequestFulfilment.EFOLDERID) 
    WHERE 
    eFolder.eCreationTime between '01/01/2015' and '13/10/2015' 

回答

0

這應該工作 -

SELECT SUM(Cnt) FROM 
    (SELECT count(*) AS Cnt 

     FROM 
      eUser eUser2 RIGHT OUTER JOIN prcIncidentManagement ON (eUser2.eUserName=prcIncidentManagement.AssignedTo) 
      INNER JOIN eFolder ON (prcIncidentManagement.EFOLDERID=eFolder.eFolderID) 
     WHERE 
     eFolder.eCreationTime between '01/01/2015' and '13/10/2015' 
     union 
     SELECT count(*) 
     FROM 
      eUser RIGHT OUTER JOIN prcRequestFulfilment ON (prcRequestFulfilment.AssignedTo=eUser.eUserName) 
      INNER JOIN eFolder ON (eFolder.eFolderID=prcRequestFulfilment.EFOLDERID) 
     WHERE 
     eFolder.eCreationTime between '01/01/2015' and '13/10/2015') A 
0

嘗試:

select sum(cnt) total_cnt 
from (
    SELECT count(*) cnt 
    FROM eUser eUser2 
    RIGHT OUTER JOIN prcIncidentManagement ON eUser2.eUserName = prcIncidentManagement.AssignedTo 
    INNER JOIN eFolder ON prcIncidentManagement.EFOLDERID = eFolder.eFolderID 
    WHERE eFolder.eCreationTime between '01/01/2015' and '10/13/2015' 

    union all 

    SELECT count(*) 
    FROM eUser 
    RIGHT OUTER JOIN prcRequestFulfilment ON prcRequestFulfilment.AssignedTo = eUser.eUserName 
    INNER JOIN eFolder ON eFolder.eFolderID = prcRequestFulfilment.EFOLDERID 
    WHERE eFolder.eCreationTime between '01/01/2015' and '10/13/2015' 
) x 

可以使用union all而不是union
如果您使用union而第一個和第二個查詢返回的count相同,那麼union將刪除一個計數,因爲它只允許不同的值。
所以,你不會得到你期待的結果。

日期必須爲mm/dd/yyyy,否則使用convert從字符串中獲取數據。

1

這應該爲你做,除非我建議你使用UNION ALL而不是UNION

如果同時你的查詢返回相同的值,那麼UNION操作將使兩個值之間的隱含DISTINCTSUM將只是那些值中的一個,而不是增加了一倍。

SELECT SUM(cnt_val) Sum_Values 
FROM (
    SELECT count(*) cnt_val 
    FROM eUser eUser2 
    RIGHT JOIN prcIncidentManagement 
     ON (eUser2.eUserName = prcIncidentManagement.AssignedTo) 
    INNER JOIN eFolder 
     ON (prcIncidentManagement.EFOLDERID = eFolder.eFolderID) 
    WHERE eFolder.eCreationTime BETWEEN '01/01/2015' 
      AND '13/10/2015' 

    UNION ALL 

    SELECT count(*) cnt_val 
    FROM eUser 
    RIGHT JOIN prcRequestFulfilment 
     ON (prcRequestFulfilment.AssignedTo = eUser.eUserName) 
    INNER JOIN eFolder 
     ON (eFolder.eFolderID = prcRequestFulfilment.EFOLDERID) 
    WHERE eFolder.eCreationTime BETWEEN '01/01/2015' 
      AND '13/10/2015' 
    ) Result_Set 

因此,假設兩個查詢的結果是:

2 --> first query result 
2 --> second query result 

然後總和爲2,如果你使用UNION代替UNION ALL

0

那麼你可以採取這兩個輸出,然後總結。無需使用Union all或Union。

Declare @SumOfIncident int= (SELECT count(*) 

FROM eUser eUser2 RIGHT OUTER JOIN prcIncidentManagement ON (eUser2.eUserName=prcIncidentManagement.AssignedTo) INNER JOIN eFolder ON (prcIncidentManagement.EFOLDERID=eFolder.eFolderID) 

WHERE eFolder.eCreationTime between '01/01/2015' and '13/10/2015') 


Declare @requestOfFullfillment int= (SELECT count(*) 

FROM eUser eUser2 RIGHT OUTER JOIN prcIncidentManagement ON (eUser2.eUserName=prcIncidentManagement.AssignedTo) INNER JOIN eFolder ON (prcIncidentManagement.EFOLDERID=eFolder.eFolderID) 

WHERE eFolder.eCreationTime between '01/01/2015' and '13/10/2015') 

SELECT @SumOfIncident + @requestOfFullfillment