首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql拼凑数据行

2013-11-29 
sql拼接数据行PIDPName PAmount PAddressaaa1 张三10000四川省aaa1 李四20000四川省aaa1 王五30000四川省

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 行受影响)


[解决办法]
来晚了一步,算了,写出来也和1楼一样

热点排行