SqlServer实现oracle10g的 wmsys.wm_concat()/使用自连接、for
发布时间:2020-12-12 12:44:06 所属栏目:MsSql教程 来源:网络整理
导读:--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中--注--1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。--2、for xml path('') 应该应用于语句的最后面,继而生成xml。--3、for xml path('root')中的path参数是生成的xml最
--使用 自连接、for xml path('')和stuff合并显示多行数据到一行中 --注 --1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。 --2、for xml path('') 应该应用于语句的最后面,继而生成xml。 --3、for xml path('root')中的path参数是生成的xml最顶级节点。 --4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。如[value] +','则是用,分隔的数据(aa,bb,)。 --5、对于合并多行数据显示为一行数据时使用自连。 --生成测试表并插入测试数据 create table tb(id int,value varchar(10)) insert into tb values(1,'aa') insert into tb values(1,'bb') insert into tb values(2,'aaa') insert into tb values(2,'bbb') insert into tb values(2,'ccc') go --第一种显示 select id,[val]=( select [value] +',' from tb as b where b.id = a.id for xml path('')) from tb as a --第一种显示结果 --1 aa,--1 aa,--2 aaa,bbb,ccc,--第二种显示 select id,' from tb as b where b.id = a.id for xml path('')) from tb as a group by id --第二种显示结果 --1 aa,--第三种显示 select id,[val]=stuff(( select ','+[value] from tb as b where b.id = a.id for xml path('')),1,'') from tb as a group by id --第三种显示结果 --1 aa,bb --2 aaa,ccc --典型应用 --AMD_GiftNew中获取所有的管理员ID --select adminIds = stuff((select ','+cast(UserId as varchar) from MM_Users where RoleId = 1 and flag =0 for xml path('')),'') --典型应用显示结果 --3,27 -- 查询处理 --SQL2005中的方法2 create table tb(id int,'ccc') go select id,[values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')),'') from tb group by id (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |