[英]How do I combine these two queries into one query?
我知道有关此类主题的问题很多,但找不到任何可以解决我的问题的问题。
我有两个工作查询。 我想将它们合并为一个查询。 当我尝试合并它们时,显示的数据不正确。 但是,当它们分开时,数据是正确的。
查询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 |
+--------------+------------+-----------+
每个查询都有一个供体名称栏和一个具有货币值的栏。 在我的最后一个查询中,我想要一列带有捐赠者名称的列,一个标记为“已支付总额”的列和一个标记为“口袋”的列。 当我结合这两个查询时,“已付款总额”列和“口袋”列都被弄乱了。
我知道如果没有表模式,这可能很难解决,但是我想我会尝试一下。 提前致谢。
试试这个:
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
(“`”)代替列名的单引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.