Sql server MSSQL:如何创建以逗号分隔值显示列的视图

Sql server MSSQL:如何创建以逗号分隔值显示列的视图,sql-server,view,Sql Server,View,我使用的是MSSQL数据库,我有一个名为UserDepartments的表,其中包含分配给一个用户的所有部门ID,如下所示 UserID | DepartmentID 1 | 220 1 | 330 1 | 210 1 | 100 2 | 330 2 | 440 3 | 550 UserID | Departments 1 | 220, 330, 210, 100 2 | 330, 440 3

我使用的是MSSQL数据库,我有一个名为UserDepartments的表,其中包含分配给一个用户的所有部门ID,如下所示

UserID | DepartmentID
1      | 220
1      | 330
1      | 210
1      | 100
2      | 330
2      | 440
3      | 550
UserID | Departments
1      | 220, 330, 210, 100
2      | 330, 440
3      | 550
我想要创建一个表的视图,如下所示

UserID | DepartmentID
1      | 220
1      | 330
1      | 210
1      | 100
2      | 330
2      | 440
3      | 550
UserID | Departments
1      | 220, 330, 210, 100
2      | 330, 440
3      | 550
可以用MSSQL来做吗?

试试这个-

查询:

DECLARE @temp TABLE
(
       UserID INT
     , DepartmentID INT
)

INSERT INTO @temp (UserID, DepartmentID)
VALUES 
     (1, 220),(1, 330),
     (1, 210),(1, 100),
     (2, 330),(2, 440),
     (3, 550)

SELECT 
       t.UserID
     , DepartmentID = STUFF((
          SELECT ', ' + CAST(DepartmentID AS VARCHAR(10))
          FROM @temp t2
          WHERE t2.UserID = t.UserID
          FOR XML PATH(''), TYPE).value('.', 'VARCHAR(1024)'), 1, 2, '')                            
FROM ( 
     SELECT DISTINCT UserID 
     FROM @temp
) t
UserID      DepartmentID
----------- -----------------------------
1           220, 330, 210, 100
2           330, 440
3           550
输出:

DECLARE @temp TABLE
(
       UserID INT
     , DepartmentID INT
)

INSERT INTO @temp (UserID, DepartmentID)
VALUES 
     (1, 220),(1, 330),
     (1, 210),(1, 100),
     (2, 330),(2, 440),
     (3, 550)

SELECT 
       t.UserID
     , DepartmentID = STUFF((
          SELECT ', ' + CAST(DepartmentID AS VARCHAR(10))
          FROM @temp t2
          WHERE t2.UserID = t.UserID
          FOR XML PATH(''), TYPE).value('.', 'VARCHAR(1024)'), 1, 2, '')                            
FROM ( 
     SELECT DISTINCT UserID 
     FROM @temp
) t
UserID      DepartmentID
----------- -----------------------------
1           220, 330, 210, 100
2           330, 440
3           550

可能重复谢谢你能把它作为一个答案贴出来,这样我就可以把它标记为一个答案吗?不需要新的答案,这已经被回答了很多次了。你可以就现有答案投票。玩得开心。这也很好