我試圖使用MSSQL從一個表中獲得一個特定的輸出。該表的資料如下。 我想要一個新的列,它是一個字串,并且包含一個人的所有角色。 所以在這種情況下,Bob的結果將是Role abc, Role def, Role ghi;Tom - Role jkl。 為了得到下面這個表格,我正在連接幾個表格,我只是不知道如何輸出這個字串。
| ID | 姓名 | 角色。||
|---|---|---|---|
| 00001? | Bob | Bob | 角色abc |
| 角色abc | |||
| 00001? | Bob | Role def | Role def |
| 00001? | Bob | Role ghi | Role ghi |
| 00002? | 湯姆 | ||
| 湯姆 | 角色jkl | ||
| 角色jkl |
預先感謝!
到目前為止,我所擁有的只是簡單的選擇來獲取資料。
SELECT
E.姓名。
E.ID。
R.角色
FROM
雇員_角色ER
JOIN ROLE R ON R.ID = ER.RoleID
JOIN EMPLOYEE E ON ER.EmployeeID = E.ID
uj5u.com熱心網友回復:
你可以使用row_number() :
select id, name,
concat('Role ', row_number() over(partition by id order by name) as Role
from t。
uj5u.com熱心網友回復:
像這樣的一個常見方法是使用FOR XML PATH ('')來實作串聯,例如:
WITH cteEmployees as
(
SELECT SELECT
E.姓名
, E.ID
, R.[角色]
FROM[/span
雇員_角色 er
JOIN [ROLE] R ON R.ID = ER.RoleID
JOIN EMPLOYEE E ON ER.EmployeeID = E.ID
)
SELECT
身份證
, 姓名
, 角色
FROM[/span
(
SELECT
身份證
, 名稱
,
STUFF(
(
SELECT ', ' [ Role]
FROM cteEmployees e2
WHERE e2.Name = e1.Name
FOR XML PATH (''/span>)
)
, 1, 2, '') 角色
FROM cteEmployees e1
) e
GROUPBY
身份證
, 名稱
, 角色
uj5u.com熱心網友回復:
在SQL Server 2017及以上版本中,你將使用STRING_AGG():
SELECT E.Name, E.ID,
STRING_AGG(R.Role, ',') WITHIN GROUP (ORDER BY R.Role
FROM EMPLOYEE_ROLE ER JOIN 角色
ROLE R
ON R.ID = ER.RoleIDJOIN
EMPLOYEE E
ON ER.EmployeeID = E.ID
GROUP BY E.Name, E.ID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/334023.html
標籤:
