2015-12-01 3 views
1

У меня есть два запроса, которые я пытаюсь объединить в один, используя инструкцию union.Как объединить эти два запроса с помощью Union?

Это то, что я до сих пор:

(Select Distinct concat(d.FirstName, ' ', d.LastName) as 'Donor', 
     sum(a.amount) as 'Total Paid', 0 as Pocket 
     From Donor d, Pledge p, Payment a 
     Where d.DonorId=p.DonorId 
     and p.pledgeId = a.pledgeId 
     group by d.donorid) 

     union all 

    (Select Distinct concat(d.FirstName, ' ', d.LastName) as 'Donor', 
     0 as 'Total Paid',sum(a.amount) as 'Pocket' 
     From Donor d, Pledge p, Payment a 
     Where (a.CompanyId is null) 
     and d.DonorId=p.DonorId 
     and p.pledgeId = a.pledgeId 
     group by d.donorid); 

Это создает:

+--------------+------------+---------+ 
| Donor  | Total Paid | Pocket | 
+--------------+------------+---------+ 
| John Smith | 3500.00 | 0.00 | 
| Linda Smith |  250.00 | 0.00 | 
| Jack Clinton |  200.00 | 0.00 | 
| Jane Doe  | 2100.00 | 0.00 | 
| John Smith |  0.00 | 1750.00 | 
| Linda Smith |  0.00 | 100.00 | 
| Jack Clinton |  0.00 | 200.00 | 
| Jane Doe  |  0.00 | 2100.00 | 
+--------------+------------+---------+ 

Я не знаю, как избавиться от повторяющихся секций. Я хочу, чтобы четыре лучших имени были объединены с нижними четырьмя именами, чтобы создать 4 имени с «итоговой оплатой» и «карманом», чтобы иметь значения, а не нули.

Просто чтобы быть ясно, я хочу, чтобы выход выглядеть следующим образом:

+--------------+------------+---------+ 
| Donor  | Total Paid | Pocket | 
+--------------+------------+---------+ 
| John Smith | 3500.00 | 1750.00 | 
| Linda Smith |  250.00 | 100.00 | 
| Jack Clinton |  200.00 | 200.00 | 
| Jane Doe  | 2100.00 | 2100.00 | 
+--------------+------------+---------+ 

Я знаю, что я что-то отсутствует об утверждении накидной, я просто не знаю, что это такое. Любая помощь приветствуется.

ответ

2

кажется, что вы не должны, вы можете просто вычислить условный sumcase):

select concat(d.FirstName, ' ', d.LastName) as 'Donor' 
    , sum(a.amount) as 'Total Paid' 
    , sum(case when a.CompanyId is null then a.amount else 0 end) as 'Pocket' 
from Donor d 
join Pledge p on d.DonorId = p.DonorId 
join Payment a on p.pledgeId = a.pledgeId 
group by d.donorid 
+0

Это возвращает синтаксическую ошибку в строке 5. Я не очень хорошо знаком с утверждением случая или как вы использовали соединение, поэтому мне трудно понять, что такое ошибка sytax. – ethanm1

+1

Я должен был это понять. Большое спасибо. Это именно то, что я искал. – ethanm1