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 PAmount PAddress
-------------------- -------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- --------------------------------------------------
1 aaa1 张三,李四,王五 60000 四川省
(1 行受影响)