首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请帮忙解决一个有关问题多谢!

2012-01-01 
请帮忙解决一个问题谢谢!!!表1编号wt1wt2001aaacccc001bbbffff001ccceeee...............................

请帮忙解决一个问题谢谢!!!
表1
编号       wt1       wt2        
001         aaa       cccc  
001         bbb       ffff
001         ccc       eeee  
..................
..................
002         ssss     yyyyy
请问如何将表1合并为表2,注:每个编号记录条数不固定。

表2
  编号       wt                                   wt2
  001         aaa,bbb,ccc,.....       cccc,ffff,eeee,......
  002         ssss                                 yyyy        



[解决办法]
drop table 表1
create table 表1(编号 varchar(10),wt1 varchar(10),wt2 varchar(10))
insert into 表1
select '001 ', 'aaa ', 'cccc '
union all select '001 ', 'bbb ', 'ffff '
union all select '001 ', 'ccc ', 'eeee '
union all select '002 ', 'ssss ', 'yyyyy '

create function f_getstr1(@no varchar(10))
returns varchar(8000)
as
begin
declare @returnstr varchar(8000)
select @returnstr = ' '
select @returnstr = @returnstr + wt1+ ', ' from 表1 where 编号=@no
return left(@returnstr,len(@returnstr)-1)
end

create function f_getstr2(@no varchar(10))
returns varchar(8000)
as
begin
declare @returnstr varchar(8000)
select @returnstr = ' '
select @returnstr = @returnstr + wt2+ ', ' from 表1 where 编号=@no
return left(@returnstr,len(@returnstr)-1)
end

select 编号,dbo.f_getstr1(编号) as 'wt ',dbo.f_getstr2(编号) as 'wt1 ' from 表1
group by 编号
[解决办法]
樓上的兩個函數可以合併為一個

create table 表1(编号 varchar(10),wt1 varchar(10),wt2 varchar(10))
insert into 表1
select '001 ', 'aaa ', 'cccc '
union all select '001 ', 'bbb ', 'ffff '
union all select '001 ', 'ccc ', 'eeee '
union all select '002 ', 'ssss ', 'yyyyy '
GO
create function f_getstr(@no varchar(10), @Flag Int)
returns varchar(8000)
as
begin
declare @returnstr varchar(8000)
select @returnstr = ' '
select @returnstr = @returnstr + (Case @Flag When 1 Then wt1 Else wt2 End) + ', ' from 表1 where 编号=@no
return left(@returnstr,len(@returnstr)-1)
end
GO
select 编号,dbo.f_getstr(编号, 1) as 'wt ',dbo.f_getstr(编号, 2) as 'wt1 ' from 表1
group by 编号
GO
drop table 表1
Drop function f_getstr

[解决办法]
--创建测试环境
create table 表1(编号 varchar(10),wt1 varchar(20),wt2 varchar(20))

--插入测试数据
insert 表1(编号,wt1,wt2)
select '001 ', 'aaa ', 'cccc ' union all
select '001 ', 'bbb ', 'ffff ' union all
select '001 ', 'ccc ', 'eeee ' union all
select '002 ', 'ssss ', 'yyyyy '

--求解过程
select * into #tmp from 表1 order by wt1,wt2

declare @id varchar(10),@wt1 varchar(8000) ,@wt2 varchar(8000)


update #tmp
set @wt1 = case when 编号 = @id then @wt1+ ', '+wt1 else wt1 end
,@wt2 = case when 编号 = @id then @wt2+ ', '+wt2 else wt2 end
,@id = 编号,wt1 = @wt1,wt2 = @wt2

select 编号,max(wt1) as wt1,max(wt2) as wt2 from #tmp group by 编号

--删除测试环境
drop table 表1,#tmp

/*--测试结果
编号 wt1 wt2
---------- -------------------- --------------------
001 aaa,bbb,ccc cccc,ffff,eeee
002 ssss yyyyy

(所影响的行数为 2 行)
*/


[解决办法]
create table 表1(编号 varchar(10),wt1 varchar(10),wt2 varchar(10))
insert into 表1
select '001 ', 'aaa ', 'cccc '
union all select '001 ', 'bbb ', 'ffff '
union all select '001 ', 'ccc ', 'eeee '
union all select '002 ', 'ssss ', 'yyyyy '
go
SELECT *
FROM(
SELECT DISTINCT
编号
FROM 表1
)A
OUTER APPLY(
SELECT
[values]=STUFF(REPLACE(REPLACE(
(
SELECT wt1 FROM 表1 N
WHERE 编号= A.编号
FOR XML AUTO
), ' <N wt1= " ', ', '), ' "/> ', ' '), 1, 1, ' ')
)N
OUTER APPLY(
SELECT
[values]=STUFF(REPLACE(REPLACE(
(
SELECT wt2 FROM 表1 Na
WHERE 编号= A.编号
FOR XML AUTO
), ' <Na wt2= " ', ', '), ' "/> ', ' '), 1, 1, ' ')
)Na
drop table 表1

/*
001aaa,bbb,ccccccc,ffff,eeee
002ssssyyyyy
*/

热点排行
Bad Request.