我有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是否在其中一个语句中忽略了这种多重总和,或者我有其他错误?
答案 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
....