Выберите заказы, которые имеют комбинацию продуктов A и B - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь выяснить запрос, который получит список заказов, который будет иметь комбинацию продуктов A и B, C и D, X и Y и т. Д. Поэтому мне нужен список, который будет отображать только заказыкоторые имеют указанные комбинации.Что-то вроде кода ниже:

select order_id, product_name
from orders
where product in( A & B, C & D)
group by order_id

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Позвольте мне истолковать ваш вопрос как пожелание конкретных пар продуктов.Если это так, вы можете использовать group by и having.Предполагая, что в ваших данных нет дубликатов:

select o.order_id
from orders o 
group by o.order_id
having sum(case when o.product in ('A', 'B') then 1 else 0 end) = 2 or
       sum(case when o.product in ('C', 'D') then 1 else 0 end) = 2 or
       sum(case when o.product in ('X', 'Y') then 1 else 0 end) = 2;

Если вы хотите, чтобы заказы имели ровно два продукта и эти пары, то добавьте условие count(*) = 2. Или,если вы хотите быть заумным, вы можете изменить else на что-то вроде else 10.

0 голосов
/ 28 мая 2018

, если ваши данные таблицы, такие как

| ORDER_ID | PRODUCT_NAME | PRODUCT |
|----------|--------------|---------|
|        1 |        xxx01 |     A、B |
|        2 |        xxx02 |     B、C |
|        3 |        xxx03 |     C、D |
|        4 |        xxx04 |     D、X |
|        5 |        xxx05 |     E、Z |

, попробуйте этот скрипт:

select order_id,product_name ,product
from orders 
where product like ('%A%B%') 
or product like ('%C%D%') 

, если ваши данные таблицы как;

| ORDER_ID | PRODUCT_NAME | PRODUCT |
|----------|--------------|---------|
|        1 |        xxx01 |       A |
|        1 |        xxx02 |       B |
|        2 |        xxx03 |       C |
|        2 |        xxx04 |       D |
|        3 |        xxx05 |       E |

попробуйте этоскрипт:

select order_id
from orders 
group by order_id having   
  count( case when product in ('A','B') then 1 else null end  ) > 1
  or 
  count( case when product in ('C','D') then 1 else null end  ) > 1
...