2011-02-27 144 views
0

我有一个联盟查询与4 subquerys。例如:SQL联合查询不正确加总

(Select Sum(x.result) 
FROM 
(
<query 1> 
UNION 
    <query 2> 
UNION    
select IsNull(Sum(A.TransAmount) + Sum(Case When A.BetResult = 1 Then (A.BetWinAmount + (A.TransAmount * -1)) End), 0) As Result 
from <join omitted> 
where <where omitted> 
) As X 

问题出在与“总和”的联盟。我在那里做的是总和a.transamount和其他列(计算)betresult = 1时总结。当我运行查询计算不正确。

当我将该联合从语句中拉出并单独运行时,它会返回正确的值。在联盟内部它不计算两个和。

UNION是否忽略了其中一个语句中的这种类型的多重总和还是我有其他错误?

+3

你可以发布整个查询吗?一个可能的错误是'union'消除重复,而'union all'不会 – Andomar 2011-02-27 14:36:23

回答

0

尝试使用CTE,然后从该表中选择SUM。这可能使它考虑单个表格采取适当的总和。

;WITH SUMTab as 
(
<query 1> 
UNION   
<query 2> 
UNION     
select IsNull(Sum(A.TransAmount) + Sum(Case When A.BetResult = 1 Then (A.BetWinAmount + (A.TransAmount * -1)) End), 0) As Result from <join omitted> where <where omitted> 
) 
SELECT SUM(result) from SUMTab 
....