簡體   English   中英

將多行匯總為單行

[英]Rolling up multiple rows into a single row

需要查詢以獲取項目名稱以及分配了項目的員工各自的名字。 如果給定項目下有多個員工,則第二列應將所有名稱用逗號分隔。 例如:Vikash,Ashish。

我有兩個表:

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

我不知道如何組合多個行並使用逗號分隔它們。

也許使用對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

嘗試這個:

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;

如果您的合並字符串長度超過4000個字符,則LISTAGG將引發錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM