日期:2014-05-19  浏览次数:20488 次

求一条sql语句(关于数据复制问题)
比如有两个表:person_info   person_skill
我现在想把person_skill里面computer字段的值全部导入到person_info的computer字段里。
如果是一对多,并且要加html代码,语句该如何写?我下面列个表说明一下:

person_skill:
perid   computer
88           熟练
88           非常熟练
88           非常非常熟练
89           很好
我希望的结果是:
person_info:
perid   computer
88           熟练 <br> 非常熟练 <br> 非常非常熟练
89           很好

注:person_info是我新建的表,而person_skill是我打算放弃的表,现在是想保存有用的资料,我只想在查询分析器里用sql语句实现,不希望在程序里编程去实现

------解决方案--------------------
就是一个行转列的问题了
------解决方案--------------------
站内搜索 '行转列 '

一条语句不可以

建一个函数后可以用一条语句实现
------解决方案--------------------
参考:
create table tbltest(列A int,列C varchar(100))
go
insert into tbltest
select 1, 'A ' union all
select 1, 'B ' union all
select 1, 'C ' union all
select 1, 'F ' union all
select 1, 'G ' union all
select 2, 'E ' union all
select 2, 'F ' union all
select 2, 'F '
go

--写一个聚合函数:
create function dbo.fn_Merge(@F1 int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r= ' '
select @r=@r+ ', '+列C from tbltest where 列A=@F1 -- 先加逗号,再串起来
return stuff(@r,1,1, ' ') -- 删除最前面加的逗号
end
go

-- 调用函数
select 列A, dbo.fn_Merge(列A) as 列C
from tbltest
group by 列A
go

--删除测试数据
drop table tbltest
drop function fn_Merge

--查看结果
/*
列A 列C
1 A,B,C,F,G
2 E,F,F
*/
------解决方案--------------------
用临时表,最后导出数据到 person_info


create table person_skill(perid int,computer varchar(1000))
insert person_skill select 88, '熟练 '
insert person_skill select 88, '非常熟练 '
insert person_skill select 88, '非常非常熟练 '
insert person_skill select 89, '很好 '
go

select * into #t from person_skill
declare @computer varchar(1000)
declare @perid varchar(1000)
update #t set @computer=case when perid=@perid then @computer+ ' <br> '+computer else computer end,@perid=perid,computer=@computer


select perid, max(computer) as computer into person_info from #t group by perid
select * from person_info

drop table person_skill,#t,person_info