有两个记录转化一个记录
有两个记录转化一个记录。例如:
id ida name num amount
1 001 白菜 11 11
2 001 苹果 10 100
转化为
001 白菜 11 11 苹果 10 100
在线等待!
------解决方案--------------------create table A(id int, ida varchar(10), name_id int, num int, amount int)
insert A select 1, '001 ', 1, 11, 11
union all select 2, '001 ', 2, 10, 100
go
create table B(name_id int, name varchar(10))
insert B select 1, '白菜 '
union all select 2, '苹果 '
go
declare @sql varchar(8000)
set @sql= 'select ida, '
select @sql=@sql+ 'name= '+quotename(name, ' ' ' ')+ ',num= '+rtrim(num)+ ',amount= '+rtrim(amount)+ ', '
from A
inner join B on A.name_id=B.name_id
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from A group by ida '
exec(@sql)
--result
ida name num amount name num amount
---------- ---- ----------- ----------- ---- ----------- -----------
001 白菜 11 11 苹果 10 100
------解决方案--------------------两张表的处理更简单:
create table t1(id int,ida varchar(8),name_id int,num int,amount int)
insert into t1 select 1, '001 ',1,11,11
insert into t1 select 2, '001 ',2,10,100
create table t2(name_id int,name varchar(8))
insert into t2 select 1, '白菜 '
insert into t2 select 2, '苹果 '
go
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ',[name '+rtrim(name_id)+ ']= ' ' '+name+ ' ' ' '
+ ',[num ' +rtrim(name_id)+ ']=sum(case name_id when '+rtrim(name_id)+ ' then num else 0 end) '
+ ',[amount '+rtrim(name_id)+ ']=sum(case name_id when '+rtrim(name_id)+ ' then amount else 0 end) '
from t2
set @sql= 'select ida '+@sql+ ' from t1 group by ida '
exec(@sql)
go
/*
ida name1 num1 amount1 name2 num2 amount2
-------- ----- ----------- ----------- ----- ----------- -----------
001 白菜 11 11 苹果 10 100
*/
drop table t1,t2
go
------解决方案--------------------关键是看你的T2 表数据量大不大