SQL server把多条记录查找结果合并成一条记录

例如我们有如下一张"用户工厂"表,为多对多关系:

select UserId,工厂号 from 用户工厂

 

如果我们希望得到三个工厂号对应了哪些UserId,把这些UserId放到一行里面显示出来,如下图:

 

 可以使用如下sql语句:

select distinct 工厂号,人员=(
  select CONVERT(nvarchar(10),UserId)+',' from 用户工厂 b where a.工厂号=b.工厂号 for xml Path('')
)
from 用户工厂 a

 注意:上面这段sql语句直接复制到SQL中运行可能会报错,需要去掉所有空格和换行再运行即可,如下:

select distinct 工厂号,人员=(select CONVERT(nvarchar(10),UserId)+',' from 用户工厂 b where a.工厂号=b.工厂号 for xml Path(''))  from 用户工厂 a

 

再通过多表联合查询得到工厂号对应的人员名字,如下:

select distinct 工厂号,人员=(
    select UserName+',' from 用户工厂 b inner join 用户信息表 s on s.UserId=b.UserId
    where a.工厂号=b.工厂号 for xml Path('')
) 
from 用户工厂 a

 

posted @   海角之上  阅读(4407)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
历史上的今天:
2019-10-18 C#中的ref和out与SQL中的output
点击右上角即可分享
微信分享提示