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

关于字符串的链接解决思路

2012-12-17 
关于字符串的链接create table Test (barcode varchar(20),aa varchar(100))goinsert into testvalues(69

关于字符串的链接
create table Test (barcode varchar(20),aa varchar(100))
go
insert into test
values('6900000000007','0.00(2),')
go
insert into test
values('6900000000007','8.00(2),')
go
insert into test
values('6900000000083','95.00(1),')
go
insert into test
values('6900000000083','86.20(1),')
go
select * from test
--------------
barcode               aa
'6900000000007'     0.00(2),
'6900000000007'     8.00(2),
'6900000000083'     95.00(1),
'6900000000083'     86.20(1),
现在我想得到这样的结果:
barcode               aa
'6900000000007'      0.00(2),8.00(2),
'6900000000083'      95.00(1),86.20(1),

也就是把barcode相同的aa连接起来。。我只想到了用游标的方式,可数据量很大,效率太低了。
有什么好的方法么?感谢~~
[最优解释]

create table Test (barcode varchar(20),aa varchar(100))
 go
 insert into test
 values('6900000000007','0.00(2),')
 go
 insert into test
 values('6900000000007','8.00(2),')
 go
 insert into test
 values('6900000000083','95.00(1),')
 go
 insert into test
 values('6900000000083','86.20(1),')
 go


create function getstr(@id varchar(20))
returns varchar(100)
as
begin
     declare @str varchar(100)
     set @str=''
     select @str=@str+aa from Test where barcode=@id
     return @str
end
select barcode,dbo.getstr(barcode) from test group by barcode

/*
barcode              
-------------------- ------------------
6900000000007        0.00(2),8.00(2),
6900000000083        95.00(1),86.20(1),

   

[其他解释]
create table Test (barcode varchar(20),aa varchar(100))
 go
 insert into test
 values('6900000000007','0.00(2),')
 go
 insert into test
 values('6900000000007','8.00(2),')
 go
 insert into test
 values('6900000000083','95.00(1),')
 go
 insert into test
 values('6900000000083','86.20(1),')
 go
 select barcode,
       aa=stuff((select ''+aa from test where barcode=a.barcode for xml path('')),1,1,'')
   from test a group by barcode
   
 /*
barcode              aa
-------------------- -----------------
6900000000007        0.00(2),8.00(2),
6900000000083        5.00(1),86.20(1),
   

------其他解决方案--------------------


select barcode,(select aa+',' from test where barcode=a.barcode fro xml path('')) as aa
from test as a
group by barcode
[其他解释]

引用:
SQL code?



123456789101112131415161718192021222324

create table Test (barcode varchar(20),aa varchar(100))  go  insert into test  values('6900000000007','0.00(2),')  go  insert into test  val……

我刚开始也是用这种方法。。可是这部分数据是在SQL SERVER2000上的,不支持for xml path('')。。。还有别的方法么?
[其他解释]
引用:
select barcode,(select aa+',' from test where barcode=a.barcode fro xml path('')) as aa
from test as a
group by barcode

数据是在SQL 2000上,不支持for xml path。。。有别的方法么?
[其他解释]
引用:
SQL code?



12345678910111213141516171819202122232425262728293031323334

create table Test (barcode varchar(20),aa varchar(100))  go  insert into test  values('6900000000007','0.00(2),')  go  i……

可用。。。谢谢
[其他解释]
引用:
SQL code?



12345678910111213141516171819202122232425262728293031323334

create table Test (barcode varchar(20),aa varchar(100))  go  insert into test  values('6900000000007','0.00(2),')  go  i……

可用,只是,数据量在40W左右,速度挺慢的。。。。

热点排行
Bad Request.