Я пытаюсь внедрить XMLAGG в запрос, который я использую для поиска пользовательских AccessRights в Teradata. Вот запрос:
SELECT
A.RoleName
, B.DatabaseName
--, B.AccessRight
, Trim(Trailing ',' FROM (XmlAgg(Trim(B.AccessRight) || ',' ORDER BY B.AccessRight) (VARCHAR(10000)))) AS AccessRight
FROM DBC.RoleMembers A JOIN DBC.AllRoleRights B
ON A.RoleName = B.RoleName
WHERE Grantee='?your_id'
GROUP BY 1,2
ORDER BY 2,1,3
;
Ранее я просто выбирал закомментированную строку B.AccessRight
и просматривал результаты, но я хотел объединить AccessRights для каждой роли в одну строку.
Запрос выше работает, но иногда строки будут иметь дубликаты. Вот быстрый пример вывода:
+----------+--------------+-------------+
| RoleName | DatabaseName | AccessRight |
+----------+--------------+-------------+
| Role1 | dbA | CM, CT, CV |
+----------+--------------+-------------+
| Role2 | dbB | R, R, R, R | <-- Problematic column
+----------+--------------+-------------+
| Role3 | dbC | E, R |
+----------+--------------+-------------+
Я пытался это исправить, добавив DISTINCT в мой запрос XMLAGG, как я видел в нескольких других решениях , но, похоже, сам не могу понять, что это правильно.