SQL выбирает строки на основе символов подстановки и = в предложении IN - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть ситуация, когда мне нужно выбрать Customer_ID, элементы которых содержат ключевые слова «box» и «phone», что означает, что минимальное условие составляет не менее 2 строк, одна для коробки, одна для телефона, обе должны показать для этого customer_ID, заказ не имеет значения, но проблема, например, phone3105557890, жало всегда одинаковое, "телефон", но финальная часть может отличаться,

образец данных

    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%'

как объединить две вышеупомянутые логики, чтобы заставить это работать? мне нужно объявить переменную?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете использовать 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)
0 голосов
/ 05 сентября 2018
select customer_ID from myTable where item = 'box' or item like 'phone%'
...