我使用的是基于Oracle的系统。
你如何一起使用like,having和case case?
我基本上试图列出在事务表中找到的具有4个以上“A类”事务或超过1个“B类”事务的所有唯一个体。我想使用like
的原因是因为在事务类之间区分的唯一方法是在事务类型列中使用like
语句。
例如,有许多交易类型,但只有“A类”有'%ABC%'
作为其交易类型的一部分,而“B类”是所有其他类型没有'%ABC%'
在他们的交易类型栏中。
所以,我希望我的查询只返回超过4个“A类”交易或1个“B类”交易的个人。
这是我到目前为止所做的:
select tt.indiv_id, count(*) from transactiontable tt
group by tt.indiv_id
case when tt.tran_type like '%ABC'
having count(*) > 4
else
having count(*)>1.
我在网站上搜索了一下,但我没有找到一个使用所有这些功能的例子。
答案 0 :(得分:1)
select tt.indiv_id,
count(case when tt.tran_type like '%ABC' then 1 end) as ClassACount,
count(case when tt.tran_type not like '%ABC' then 1 end) as ClassBCount
from transactiontable tt
group by tt.indiv_id
having count(case when tt.tran_type like '%ABC' then 1 end) > 4
or count(case when tt.tran_type not like '%ABC' then 1 end) > 1
答案 1 :(得分:0)
试试这个
select tt.indiv_id, count(*)
from transactiontable tt
group by tt.indiv_id, tt.tran_type
having count(*) > case when tt.tran_type like '%ABC' then 4 else 1 end
答案 2 :(得分:0)
您的查询已结束。您希望在having子句中单独跟踪每种事务类型:
select tt.indiv_id, count(*)
from transactiontable tt
group by tt.indiv_id
having sum(case when tt.tran_type like '%ABC%' then 1 else 0 end) > 4 or
sum(case when tt.tran_type not like '%ABC%' then 1 else 0 end) > 1