Это путаница нескольких методов и предполагает, что у вас включены службы XML. У меня нет системы TD
для тестирования, поэтому она может или не работает, но, надеюсь, она даст вам отправную точку:
WITH cte (
SELECT ROW_NUMBER() OVER() AS id, MyCol AS str -- Give an "id" to each row
FROM MyTable
)
SELECT
TRIM(
TRAILING ',' FROM (
XMLAGG(src.token || ',' ORDER BY src.token) (VARCHAR(10000))
)
)
FROM (
SELECT d.outkey, d.token
FROM TABLE (
STRTOK_SPLIT_TO_TABLE(cte.id, cte.str, ', ')
RETURNS (outkey integer, tokennum integer, token varchar(10))
) as d
GROUP BY outkey, token -- Remove duplicate entries
) src
GROUP BY src.outkey -- Build new values
;
Идея состоит в том, чтобы разделить запятуюзначение, удалите дубликаты, а затем заново создайте строку с разделителями с новыми дедуплицированными значениями. Вот некоторые ссылки:
Разделить список с разделителями
Создать разделенный список