SQL Union Query неправильно суммирует - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть запрос на объединение с 4 подзапросами.Например:

(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 этот тип множественных сумм в одном из утверждений или у меня что-то не так?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2011

По умолчанию ключевое слово UNION использует модификатор DISTINCT . Поскольку SUM также поддерживает DISTINCT , я предполагаю, что происходит только то, что вы суммируете только отдельные значения в своем запросе. Попробуйте использовать UNION ALL вместо UNION и посмотрите, верны ли результаты SUM.

0 голосов
/ 28 февраля 2011

Попробуйте использовать 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
....
...