SQL - необходимо напечатать одинаковое количество записей и одного и того же продукта для клиента в одной таблице - PullRequest
0 голосов
/ 17 мая 2018

У меня есть таблица с customer_id и product_id

customer_id product_id
c1          1
c1          2
c1          3
c2          1
c2          2
c2          3
c3          5
c4          5
c5          3

Мне нужно отфильтровать одинаковое количество клиентов, которые принесли одинаковое количество продуктов.

Кроме того, клиент (c5,3) недействителен, поскольку у него тот же product_id, но количество записей не сопоставлено с клиентами.

Это мой запроспробовал

SELECT T1.ORDER_ID FROM @ORDER T1
WHERE EXISTS (SELECT * FROM @ORDER T2
                  WHERE T2.PRODUCT_ID = T1.PRODUCT_ID
                        AND T2.ORDER_ID != T1.ORDER_ID
                  GROUP BY T2.ORDER_ID)

Выходные данные должны быть такими:

customer_id product_id

customer_id product_id
c1 1
c1 2
c1 3
c2 1
c2 2
c2 3
c3 5
c4 5

1 Ответ

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

Я попробовал приведенный ниже подход, посмотрите, подходит ли он и в вашем случае Это не кажется лучшим решением, но оно работает.

TEST_DROP1:

cust_id Prod_id
C1  1
C1  2
C1  3
C2  1
C2  2
C2  3
C3  5
C4  5
C5  3

Решение:

Шаг 1:

CREATE TABLE TEST_DROP2 AS
SELECT CUST_ID,
  LISTAGG(PRODUCT_ID, ',') WITHIN GROUP (
ORDER BY PRODUCT_ID) prods
FROM TEST_DROP1
GROUP BY CUST_ID;

TEST_DROP2:

cust_id prod_id
C1  1,2,3
C2  1,2,3
C3  5
C4  5
C5  3

Запустите приведенный ниже запрос,

SELECT *
FROM TEST_DROP1
WHERE cust_id IN
  (SELECT CUST_ID
  FROM TEST_DROP2
  WHERE PRODS IN
    ( SELECT PRODS FROM TEST_DROP2 GROUP BY PRODS HAVING COUNT(1)>1
    )
  )
ORDER BY CUST_ID,
  product_id;**

Результат:

C1  1
C1  2
C1  3
C2  1
C2  2
C2  3
C3  5
C4  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...