我有一个查询,我试图找到特定日期的多个custtype实例。以下查询正常工作:
select idm, count(*) totals
from customer.purch a
where exists (select null
from customer.name b
where b.idad = a.id
and custdate = to_date('5/11/2017', 'MM/DD/YYYY')
and custtype = 'R'
)
group by idm
having count(*) > 1;
我遇到的问题是,我不知道如何扩展上述查询以在给定日期找到不同的custtype组合。例如,如何让查询给我一个记录的idm,其中至少有一个custype是R,并且至少有一个其他的custype是'Z'?我认为customer.name字段上的自联接可能是正确的方法,但我不确定如何实现它。谢谢你的时间。
样本数据
Table customer.purch a
_______________
|idm | id |
| 1 | 896 |
| 2 | 207 |
| 3 | 359 |
________________
Table customer.name b
______________________________
|idad | custdate |custtype|
| 896 | 5/11/2017 | R |
| 896 | 5/11/2017 | Z |
| 207 | 5/11/2017 | R |
| 207 | 5/11/2017 | X |
| 359 | 5/11/2017 | R |
| 359 | 5/11/2017 | Z |
| 359 | 5/11/2017 | R |
| 359 | 5/11/2017 | R |
_______________________________
Output
______________
|IDM | count |
| 1 | 2 |
| 3 | 4 |
_______________
答案 0 :(得分:1)
如果我理解正确,您可以使用聚合和having
子句:
select p.idm, count(*) totals
from customer.purch p join
customer.name n
on p.id = n.idad
where n.custdate = date '2017-05-11'
group by p.idm
having sum(case when n.custtype = 'R' then 1 else 0 end) > 0 and
sum(case when n.custtype = 'Z' then 1 else 0 end) > 0;