抱歉标题复杂。
我有两张桌子,客户和订单:
客户 - 名称可能重复,ID 是唯一的:
name | cid
a | 1
a | 2
b | 3
b | 4
c | 5
订单 - pid 是唯一的,加入 cid:
pid | cid | date
1 | 1 | 01/01/2012
2 | 1 | 01/01/2012
3 | 2 | 01/01/2012
4 | 3 | 01/01/2012
5 | 3 | 01/01/2012
6 | 3 | 01/01/2012
所以我用这段代码来计算:
select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
where date between '01/01/2012' and '02/02/2012'
group by name,date
当客户的 cid 与订单中的 cid 不匹配时,它工作正常但没有给我空行,例如 name-c、id-5
select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
AND date between '01/01/2012' and '02/02/2012'
group by name,date
因此,我更改了应用于联接的位置,效果很好,它给了我空行。所以在这个例子中我会得到:
name | date | count
a | 01/01/2012 | 3
b | null | 1
b | 01/01/2012 | 3
c | null | 1
但是因为名称有不同的 cid,所以即使名称本身确实有订单行,它也会给我一个空行,这是我不想要的。
因此,我正在寻找一种方法,仅当共享相同名称的任何其他 cid 也没有订单中的任何行时才返回空行。
谢谢你的帮助。
- -编辑 - -
我已经编辑了空行的计数,计数从不返回空值而是 1。
的结果
select * from (select customers.name, orders.date, count(*) as count
from customers
left JOIN orders ON customers.cid = orders.cid
AND date between '01/01/2012' and '02/02/2012'
group by name,date) as t1 group by name
是
name | date | count
a | 01/01/2012 | 3
b | null | 1
c | null | 1