比如有两个表: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 @[email protected]+ ', '+列C from tbltest where [email protected] -- 先加逗号,再串起来
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 [email protected] then @computer+ ' <br> '+computer else computer end,@perid=perid,[email protected]
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