楼主说的叫做"行转列"
例如:
A表用来保存所有记录的列
B表是保存所有学生的记录
临时表#cc :保存A表与B表"笛卡尔集"
cc_temp:保存最终结果
A表中有记录与字段
id column value(varchar(30))
1 性别 ''
2 身高 ''
B表中有记录
id name
1 张三
2 李四
然后A表与B表"笛卡尔集"
SELECT b.*,a. column ,a.value into #cc from A a ,B b
#CC结果:
id name column value
1 张三 性别 ''
1 张三 身高 ''
2 李四 性别 ''
2 李四 身高 ''
然后更新#cc中学生的相应信息
结果:
id name column value
1 张三 性别 男
1 张三 身高 170
2 李四 性别 男
2 李四 身高 170
然后#cc表进行"行转列"
declare @sql varchar(8000)
set @sql = 'select id,name'
select @sql = @sql + ',max(case column when '''+column +''' then value end) ['+column +']'
from (select distinct column from #cc) as a
select @sql = @sql+'into cc_temp from #cc group by id,name'
--print @sql
exec(@sql)
CC_temp记录:
id name 性别 身高
1 张三 男 170
2 李四 男 170
-------------------------------完----
PS:这样就要可以完成楼主说的功能了,请用户选择A表中的列名,然后组合SQL语句查询目标表CC_TEMP就可以了~~~