SQL联合查询未正确汇总

时间:2011-02-27 14:31:29

标签: sql-server union sum

我有4个subquerys的Union查询。例如:

(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从语句中拉出并自行运行时,它会返回正确的值。在联盟内部,它不计算两笔金额。

UNION是否在其中一个语句中忽略了这种多重总和,或者我有其他错误?

2 个答案:

答案 0 :(得分:2)

默认情况下为UNION关键字uses the DISTINCT modifier。从SUM also supports DISTINCT开始,我猜测正在发生的事情是你只是在查询中对不同的值进行求和。尝试使用UNION ALL而不是UNION,看看SUM结果是否正确。

答案 1 :(得分: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
....