寫SQL時,常會需要將多筆相同欄位的資料合併成一個字串,這邊來記錄一下之前的解法。
Table
以兩張簡單的資料表(dbo.UserMain
& dbo.UserRole
)為範例
-
dbo.UserMain
UserID UserName 1 Davolio 2 Fuller 3 Leverling 4 Peacock -
dbo.UserRole
UserID RoleName 1 Boss 2 PM 2 SA 3 PG 4 SA 4 SD 4 PG
使用 FOR XML 語法合併欄位
SELECT
U.UserID,
U.UserName,
ISNULL(STUFF(pRoleList.RoleValue, 1, 1, ''), '') AS Roles
FROM dbo.UserMain U
OUTER APPLY (
SELECT
',' + UR.RoleName
FROM dbo.UserRole UR
WHERE U.UserID = UR.UserID
FOR XML PATH ('')
) pRoleList (RoleValue)
- 使用
OUTER APPLY
將UserMain與UserRole關聯建立起來 - 使用
FOR XML PATH
1將多筆結果以,
合併為一筆顯示 - 使用
STUFF
2 去除掉第一個多餘的逗號STUFF-可於字串指定位置插入指定字串
STUFF(原字串, 起始位置, 移除長度, 插入字串)
查詢結果
UserID | UserName | Roles |
---|---|---|
1 | Davolio | Boss |
2 | Fuller | PM,SA |
3 | Leverling | PG |
4 | Peacock | SA,SD,PG |
沒有留言:
張貼留言