在 SQL 服务器的单个列/行中获取多个值

Get multiple values in a single column / row in SQL Server

我有一个 table projects,其中有 projectid 和 projectname。 每个项目都有多个用户, table 是 project_users 字段是 projectuserid, projectid.

另外每个项目都有多个解决方案 table 是 project_solutions 字段是 projectsolutionid, projectid.

同样,每个解决方案都有多个用户,这些用户存储在 table solution_users 中,字段为 solutionuserid, solutionid, userid

此处有大师 tables users 用于字段 userid, username 的用户和 solutions 用于字段 solutionid, solutionname.

的解决方案

我试图在单行中获取输出,其中第一列是 projectid,第二列是相应的 users of the project in an array or json format,第三列是 solutions for the project,第四列是 solution users

table如下

项目

 projectid      projectname
    1             abc
    2             xyz

用户

 userid      username        image(data type image)
    1          user1         04949949499994
    2          user2         3434jj34kjd3434
    3          user3         8934u34kj343434

解决方案

 solutionid      solution_name
     1               sol1
     2               sol2
     3               sol3

project_users

  id     projectuserid        projectid
   1           1                  1
   2           2                  1
   3           3                  2

project_solutions

 id            solutionid       projectid
  1                1                1
  2                3                1
  3                2                2

project_solution_users

  id       projectsolutionid         userid
   1             1                      1
   2             1                      2
   3             2                      1
   4             2                      2
   5             2                      3

我期望的输出如下所示

 {
  projectid:1
  users: [user1, user2],
  solutions: [ sol1, sol3 ],
  user_images: [04949949499994, 3434jj34kjd3434]
 }
 {
  projectid:2
  users: [user3],
  solutions: [ sol2 ],
  user_images: [04949949499994, 3434jj34kjd3434, 8934u34kj343434]
  }

这是我试过的

    select p.projectid, ps.solutionid, cast(cast (uu.image as varbinary) as varbinary) as userimage,
    from projects as p
    left join project_users as pu on pu.projectid = p.projectid
    left join users as u on u.userid = su.userid
    left join project_solutions as ps on ps.projectid = p.projectid
    left join solutions as s on s.solutionid = ps.solutionid
    left join project_solution_users as su on su.projectsolutionid = ps.solutionid
    left join users as uu on uu.userid = su.userid
    group by p.projectid, s.solution_name, cast(cast (uu.image as varbinary) as varbinary)
    for json path, without_array_wrapper

但它会生成多行。

如何使用 SQL 服务器实现此目的?我曾尝试使用内部联接和子查询,但我卡住了,没有得到相应的输出。

select  t1.projectid,
        username,
        user_image,
        solution_name
from    dbo.project_solutions t1
left join dbo.project_users t2 on t2.projectid = t1.projectid
left join dbo.users t3 on t3.userid = t2.projectuserid
left join dbo.solutions t4 on t4.solutionid = t1.solutionid
for json auto