请教一个sql 连接多行值的问题
select f.*,(
declare @cols varchar(2000)
set @cols=''
Select @cols += a.powerName + ',' From Web_ContractItemPowerLink t
left join Web_ContractItemPower a on(t.powerId = a.powerId)
where t.ItemId=f.ItemID
group by ItemId,a.powerName
select @cols) as nName
from BDM_ITEMINFO f
create table 表一
(Id int, name varchar(10), SEX varchar(5))
insert into 表一
select 1001, '张三', '男' union all
select 1002, '李四', '女' union all
select 1003, '王五', '男'
create table 表二
(Id int, Position varchar(10))
insert into 表二
select 1001, '开发部' union all
select 1002, '市场部' union all
select 1001, '人事部' union all
select 1003, '市场部'
select a.Id,a.name,a.SEX,c.Position
from 表一 a
inner join
(select a.Id,
stuff((select '、'+b.position from 表二 b
where b.Id=a.Id for xml path('')),1,1,'') 'Position'
from 表二 a
group by a.Id) c on a.Id=c.Id
/*
Id name SEX Position
----------- ---------- ----- -------------------
1001 张三 男 开发部、人事部
1002 李四 女 市场部
1003 王五 男 市场部
(3 row(s) affected)
*/
if object_id('Tempdb..#a') is not null drop table #a
if object_id('Tempdb..#b') is not null drop table #b
create table #a(
[Id] int null,
[Name] nvarchar(100) null,
[Sex] nvarchar(2) null
)
create table #b(
[Id] int null,
[Position] nvarchar(100) null
)
Insert Into #a
select 1001,'张三','男' union all
select 1002,'李四','女' union all
select 1003,'王五','男'
Insert Into #b
select 1001,'开发部' union all
select 1002,'市场部' union all
select 1001,'人事部' union all
select 1003,'市场部'
select a.Id,a.name,a.sex, stuff((select '、'+position from #b z where b.Id=z.Id for xml path('')), 1, 1, '') position
from #b b join #a a
on a.id=b.id
group by a.Id,a.name,a.sex,b.id
----------------
(3 行受影响)
(4 行受影响)
Id name sex position
----------- ---------------------------------------------------------------- ---- ----------------------------------------------------------------------------------------------------------------
1001 张三 男 开发部、人事部
1002 李四 女 市场部
1003 王五 男 市场部
(3 行受影响)