#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)