0

我正在使用基于 Oracle 的系统。

你如何一起使用like、have和case语句?

我基本上是在尝试列出在事务表中找到的具有超过 4 个“A 类”事务或超过 1 个“B 类”事务的所有唯一个人。我之所以要使用like,是因为区分事务类的唯一方法是like在事务类型列中使用语句。

例如,有许多交易类型,但只有“A 类”作为其交易类型的一部分,而“B 类”是其交易类型列中'%ABC%'没有的所有其他类型。'%ABC%'

因此,我希望我的查询仅返回具有超过 4 个“A 类”事务或 1 个“B 类”事务的个体 ID。

这是我到目前为止所拥有的:

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.

我在网站上搜索了很多,但没有找到同时使用所有这些功能的示例。

4

3 回答 3

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
于 2012-09-05T20:21:11.610 回答
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
于 2012-09-05T20:21:39.050 回答
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
于 2012-09-05T20:19:24.010 回答