我正在使用 Oracle 10.2 并有以下查询:
select h.company, count(*)
from history h
where h.status = '2'
and h.substatus = '0'
and h.timestamp > '2012-01-01'
and h.timestamp < '2012-02-01'
group by h.company
having (h.company = 'AAA')
or (h.company = 'BBB')
or (h.company = 'CCC')
order by h.company
这将计算来自 AAA、BBB 或 CCC 公司的任何客户达到特定点(状态 = 2)的次数。
假设 BBB 没有(零)客户这样做,结果将返回 2 行计数(AAA 和 CCC)。
我想要什么:我希望查询返回所有 3 家公司的行,即使计数为零。
很抱歉查询的奇怪布局。它也适用于 MS Excel。
编辑:对不起.. 咖啡因太少了。将查询后半部分的“客户”更改为“公司”。
澄清:通过组合“h.company”和“h.customer”(或在客户表(客户c)中使用相同的方法,如“c.company”和“c.customer”,使客户成为唯一的客户
编辑 2:更新的代码。
select c.company, count(*)
from companyregister c
left join history h on h.company = c.company
where h.status = '2'
and h.substatus = '0'
and h.timestamp > '2012-01-01'
and h.timestamp < '2012-02-01'
group by c.company
having (c.company = 'AAA')
or (c.company = 'BBB')
or (c.company = 'CCC')
order by c.company
上面的两组代码将产生如下两行:AAA 630 CCC 3020
我想代表 BBB,但由于它们在历史记录中的行数为零,因此它们不会显示。