Найти запись с дублированным столбцом СПИСКА ТЕГОВ

#sql #db2-400

Вопрос:

У меня есть такой столик

Клавиша Теги
001 A B C
002 D E
003 В С А

Столбец ЗНАЧЕНИЯ содержит список ТЕГОВ с пробелами между тегами.

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

В моем примере, как я могу найти КЛЮЧИ 001 и 003?

Ответ №1:

Вы можете использовать SPLIT и LISTAGG заказывать теги

 WITH input_datas (key, tags) AS (
    VALUES
    ('001', 'A B C'),
    ('002', 'D E'),
    ('003', 'B C A')
),
key_tags AS (
    SELECT
        key, ELEMENT AS tag
    FROM
        input_datas
        CROSS JOIN TABLE (SYSTOOLS.SPLIT(tags, ' ')) AS tags
),
ordered_tags AS (
    SELECT
        key, LISTAGG(DISTINCT tag, ' ') WITHIN GROUP (ORDER BY tag) tags
    FROM key_tags
    GROUP BY key
)
SELECT * FROM ordered_tags WHERE tags IN (SELECT tags FROM ordered_tags GROUP BY tags HAVING count(1) > 1)