2015-11-19 210 views
0

我知道这类话题有很多问题,但我找不到任何有助于解决问题的问题。如何将这两个查询合并到一个查询中?

我有两个工作查询。我想将它们组合成一个查询。当我尝试合并它们时,显示的数据不正确。但是,当他们分开时,数据是正确的。

查询1:

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

输出:

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

问题2:

Select Distinct concat(d.FirstName, ' ', d.LastName) as 'Donor', 
concat('$', 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  | Pocket | 
+--------------+----------+ 
| John Smith | $1750.00 | 
| Linda Smith | $100.00 | 
| Jack Clinton | $200.00 | 
| Jane Doe  | $2100.00 | 
+--------------+----------+ 

当组合:

Select Distinct concat(d.FirstName, ' ', d.LastName) as 'Donor', 
concat('$', sum(a.amount)) as 'Total Paid', 
concat('$', sum(a2.amount)) as 'Pocket' 
From Donor d, Donor d2, Pledge p, Pledge p2, Payment a, Payment a2 
where d.donorId=p.donorId 
and p.pledgeId = a.pledgeId 
and (a2.CompanyId is null) 
and d2.DonorId = p2.DonorId 
and p2.pledgeId = a2.PledgeId 
group by d.DonorId; 

输出:

这些查询的
+--------------+------------+-----------+ 
| Donor  | Total Paid | Pocket | 
+--------------+------------+-----------+ 
| John Smith | $24500.00 | $20750.00 | 
| Linda Smith | $1750.00 | $12450.00 | 
| Jack Clinton | $1400.00 | $8300.00 | 
| Jane Doe  | $14700.00 | $8300.00 | 
+--------------+------------+-----------+ 

每个人都有捐助者的名字列,并与一些货币值的列。在我的最后一个查询中,我想要一个包含捐助者名称的列,一个标记为“全额付款”的列和一个标记为“口袋”的列。当我将这两个查询结合起来时,“总收入”列和“口袋”列全部搞砸了。

我知道这可能很难帮助没有表架构,但我想我会给它一个镜头。提前致谢。

回答

0

试试这个:

select 
    'Donor',concat('$',sum('Total Paid')) as 'Total Paid',concat('$',sum('Pocket')) as 'Pocket' 
from(
     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 
    ) group by Donor; 

注:如果您使用的是MySQL数据库,你应该使用单引号的列名backticks( “`”)来代替。

+0

感谢您的建议。这几乎可行。当我自己尝试第一个子查询并且当我尝试第二个子查询时,我会得到正确的输出。但是,当我尝试整件事时,所有内容都显示为0.列标题是正确的,但所有值都是0.我不知道为什么它会这样做。有关这个问题的任何建议? – ethanm1