我遇到一种情况,我需要选择Customer_ID,这些ID的项目包含关键字“ box”和“ phone”,这意味着最低条件是至少2行,其中一个用于包装盒,一个用于电话盒,都需要显示该customer_ID,顺序无关紧要,但是挑战是例如phone3105557890,字符串部分始终相同,即“ phone”,但最后一部分有所不同,
样本数据
Customer_ID item year
1 222 box 2018
2 222 phone3105557890 2018
3 222 box 2017
4 444 box 2018
5 444 pen 2018
6 444 apple 2018
7 666 table 2018
8 666 box 2018
9 666 phone9995467777 2018
预期结果
Customer_ID item year
1 222 box 2018
2 222 phone3105557890 2018
3 222 box 2017
4 666 table 2018
5 666 box 2018
6 666 phone9995467777 2018
警告:使用select customer_ID from myTable where item = 'box' or item like 'phone%'
不能给我我想要的东西,因为我需要框和电话行都作为最低要求显示。这就是为什么444将被过滤掉的原因。
我的尝试:
select customer_ID from myTable where item IN ('box','phone')
但是电话需要通配符where item LIKE 'phone%'
如何结合以上两种逻辑使其工作?我需要声明一个变量吗?
答案 0 :(得分:3)
您可以使用IN
和HAVING
select *
from myTable
where customer_ID in (select customer_ID
from myTable
where item = 'box' or item like 'phone%'
group by customer_ID
having count(distinct case when item like 'phone%' then 1 else item end) >= 2)
答案 1 :(得分:1)
select customer_ID from myTable where item = 'box' or item like 'phone%'