怎么把多行变成长度不等的一行,新人提问

如何把多行变成长度不等的一行,新人提问
比如说我又一张表

会员号 购买物品 数量
1          肥皂        2
1         牙膏        1
2          口罩        2
3         杯子         1
3        洗洁精       1
3        牙签         3
。。。

最终的结果要
会员  购买物品1  数量    购买物品2     数量2          购买物品3       数量3 。。。
1         肥皂        2          牙膏           1
2         口罩        2
3        杯子         1        洗洁精          1          牙签        3
。。。
------解决思路----------------------
动态行转列可以做到,但是在程序上可能会好点
------解决思路----------------------
if OBJECT_ID('购物清单') is not null drop table 购物清单

create table 购物清单(会员号 varchar(6), 购买物品 varchar(20), 数量 float,id int identity(1,1) not null)

insert into 购物清单 values('1','肥皂',  2)
insert into 购物清单 values('1','牙膏',  1)
insert into 购物清单 values('2','口罩',  2)
insert into 购物清单 values('3','杯子',  1)
insert into 购物清单 values('3','洗涤精',1)
insert into 购物清单 values('3','牙签',  3)



if OBJECT_ID('统计表') is not null drop table 统计表
if OBJECT_ID('过渡表') is not null drop table 过渡表

declare @x int
declare @i int
declare @s varchar(8000)

set @x = (select max(品种数) from (select COUNT(*)品种数 from 购物清单 group by 会员号)a)
set @s='create table 统计表(会员号 varchar(6)'
set @i=1
while @i<=@x
   begin
   set @s=@s+',购买物品'+CAST(@i as varchar(10))+' varchar(20), 数量'+CAST(@i as varchar(10))+' float'
   set @i=@i+1
   end
set @s=@s+')'
exec(@s)

select * into 过渡表 from 购物清单

insert into 统计表(会员号) select distinct 会员号 from 过渡表

set @i=1
while @i<=@x
   begin
   set @s='update 统计表 set 购买物品'+CAST(@i as varchar(10))+'=b.购买物品,数量'+CAST(@i as varchar(10))+'=b.数量 from 统计表 a join (select * from 过渡表 where id in(select min(id) from 过渡表 group by 会员号))b on a.会员号=b.会员号'
   exec(@s)
   set @s='delete from 过渡表 where id in(select min(id) from 过渡表 group by 会员号)'
   exec(@s)
   set @i=@i+1
   end

select * from 统计表