日期:2014-05-17  浏览次数:20605 次

sql拼接数据行
PID  PName PAmount PAddress
aaa1 张三   10000   四川省
aaa1 李四   20000   四川省
aaa1 王五   30000   四川省

结果:

ID           PID  PName            PAmount PAdress
row_number   aaa1 张三、李四、王五     60000   四川省


本来解决的思路:
将数据根据PID order by ,然后一一比对。因为查询条件很多,这样order by 了 会冲突其他条件上的order by 不可行。

------解决方案--------------------

create table #tab(PID varchar(50),PName varchar(50), PAmount int, PAddress varchar(50))
insert into #tab
select 'aaa1', '张三',   10000,   '四川省' union all
select 'aaa1', '李四',   20000,   '四川省' union all
select 'aaa1', '王五',   30000,   '四川省'

select ROW_NUMBER()over(order by PID)id,PID,
(select stuff((
select ','+PName from #tab for xml path('')),1,1,''))PName,
sum(PAmount)PAmount,
PAddress
from #tab
group by PID,PAddress
---------------------------------------------------------------------
id                   PID                                                PName                                                                                                                                                                                                                                                            PA