Сворачивание нескольких рядов в один ряд - PullRequest
0 голосов
/ 13 июня 2019

Требуется запрос, чтобы получить имя проекта и имя соответствующего сотрудника, которому назначен проект.Если в рамках данного проекта работает более одного сотрудника, во втором столбце все имена должны быть разделены запятой.Пример: Викаш, Ашиш.

У меня есть две таблицы:

Table1: EmployeeID, FirstName

1 Vikas
2 nikita
3 Ashish
4 Nikhil
5 anish
Table2: EmployeeDetailID, ProjectName
1|Task Track
1|CLP
1|Survey Managment
2|HR Managment
3|Task Track
3|GRS
3|DDS
4|HR Managment
6|GL Managment

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

select  FirstName, ProjectName
from EmployeeInfo, EmployeeProjects
where EmployeeID = EmployeeDetailID;

OUTPUT:

Vikas Task Track
Vikas CLP
Vikas Survey Managment
nikita HR Managment
Ashish Task Track
Ashish GRS
Ashish DDS
Nikhil HR Managment

Я не знаю, как объединить несколько строк и разделить их запятыми.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

возможно, использовать функцию объединения, которая работает с такой группой, как listagg:

select Table2.ProjectName, listagg(Table1.FirstName, ', ')
within group (order by Table1.FirstName) as members
from Table1, Table2
where Table1.EmployeeID = Table2.EmployeeDetailID
group by Table2.ProjectName
0 голосов
/ 13 июня 2019

Попробуйте это:

SELECT
    T2.PROJECTNAME,
    RTRIM(XMLAGG(XMLELEMENT(E, T1.FIRSTNAME, ',').EXTRACT('//text()')
        ORDER BY
            T1.FIRSTNAME
    ).GETCLOBVAL(), ',') AS MEMBERS
FROM
    TABLE1 T1
    JOIN TABLE2 T2 ON ( T1.EMPLOYEEID = T2.EMPLOYEEDETAILID )
GROUP BY
    T2.PROJECTNAME;

LISTAGG выдаст ошибку, если ваша объединенная строка станет длиннее 4000 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...