SQL语句使用case,like和having

时间:2012-09-05 20:17:25

标签: sql oracle11g

我使用的是基于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.

我在网站上搜索了一下,但我没有找到一个使用所有这些功能的例子。

3 个答案:

答案 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