Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用Union组合这两个查询?_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何使用Union组合这两个查询?

Mysql 如何使用Union组合这两个查询?,mysql,sql,database,Mysql,Sql,Database,我尝试使用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

我尝试使用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个名字,其中“total paid”和“pocket”都有值,而不是零

为了清楚起见,我希望输出如下所示:

+--------------+------------+---------+
| 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 |
+--------------+------------+---------+ 

我知道我遗漏了一些关于工会声明的东西,我只是不知道它是什么。非常感谢您的帮助。

似乎您不必这样做,您只需计算条件
和(使用
大小写
):


这将在第5行返回语法错误。我不太熟悉case语句或您使用join的方式,所以我很难弄清楚sytax的错误是什么。我应该抓住它的。谢谢。这正是我想要的。
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