当前位置:Gxlcms > 数据库问题 > sqlserver oracle 字符串拼接

sqlserver oracle 字符串拼接

时间:2021-07-01 10:21:17 帮助过:2人阅读

table tb ([id] int,[name] varchar(2)) insert into tb select 1,aa union all select 2,bb union all select 1,cc union all select 3,dd union all select 2,ee select * from tb --查询 select id, name=stuff((select ,+name from tb where id=t.id for xml path(‘‘)),1,1,‘‘) from tb t group by id 方法二: CREATE FUNCTION GET_STRING(@ID INT) RETURNS VARCHAR(50) AS BEGIN DECLARE @NAME VARCHAR(500) SELECT @NAME=ISNULL(@NAME+,,‘‘)+NAME FROM TB WHERE ID=@ID RETURN @NAME END SELECT ID ,DBO.GET_STRING(ID)NAME FROM TB GROUP BY ID ----------------------------------------------------------------------- 在oracle中,是有相对应的函数,sys_connect_by_path函数。 先在这里把oracle的函数实现也写下吧 select id ,itrim(max(sys_connect_by_path(name,,))) as name from (select id ,name ,lead(rnFirst) over(partition by no order by rnFirst)rnNext from (select a.id ,a.name ,row_number() over(order by a.id,a.name desc) rnFirst from @t a) tmpTable1 ) tmpTable2 start with rnNext is null connect by rnNext = PRior rnFirst group by id 以上是实现oracle中的行转列方式。 ********************************************下面我们来看一下sqlserver的,因为sqlserver没提供类似的函数,不知道sqlserver2012提供没 不过sqlserver支持起来也很简单,使用cross apply和for xml path组合来用,这两个单独都知道是怎么回事,怎么使用,但是真不知道还有它俩组合来完成这个功能的,感到很是不可思议,这里要感谢下网络上的人,原来自己写东西都是把所学到的知识记录到本机,从不放到网上,也可能是最近吧,好多工作不会,都是通过网络帮助,就把我所知道的东西也都放到网上来,大家一起学习。 sqlserver: select id, SUBSTRING(names, 1, len(names)-1) from @t AS A cross APPLY (SELECT NAME + , FROM @t AS B WHERE A.id = B.id FOR XML PATH(‘‘)) D (names) GROUP BY id, names


  1  aa,cc 
  2  bb,ee
  3  dd  

 

sqlserver实测有效

以上内容转自

http://new-fighter.iteye.com/blog/1537533

sqlserver oracle 字符串拼接

标签:

人气教程排行