2015-10-14 119 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