SqlServer——for xml path

for xml path 就是将 sql 查询出来的内容以XML的格式显示出来。参考网站MSDN:将 PATH 模式与 FOR XML 一起使用

先创建测试用的表格:

  create  table SZQCSBJ
 (
         省 varchar(100),
         市 varchar(100),
         县 varchar(100)
 );
  insert into SZQCSBJ values(‘山东‘ ,‘潍坊‘ ,‘安丘‘  );
  insert into SZQCSBJ values(‘山东‘ ,‘潍坊‘,‘寿光‘ );
  insert into SZQCSBJ values(‘山东‘,‘济南‘,‘长清‘ );
  insert into SZQCSBJ values(‘广东‘,‘深圳‘,‘深圳1‘);
  insert into SZQCSBJ values(‘广东‘,‘深圳‘,‘深圳2‘);
  insert into SZQCSBJ values( ‘江苏‘,‘苏州‘,‘苏州1‘);
  insert into SZQCSBJ values(‘江苏‘,‘苏州‘,‘苏州2‘);

建表并插入数据

1、默认格式

  首先直接执行如下sql:

select * from SZQCSBJ for xml path

生成格式如下:

<row>    --第一行

<列1名称>列1内容</列1名称>  --第一列

<列2名称>列2内容</列2名称>

……

</row>

<row>    --第二行

<列1名称>列1内容</列1名称>  --第一列

<列2名称>列2内容</列2名称>

……

</row>

结果如图:

格式如下:

2、常数,即没有列名,不是从表中查出来的数据的显示格式。

select 1+1 ,2+2 for xml path

结果如下:

可见,当没有列名的时候,就直接省略了列的节点,导致两列连在了一块,成为了一个节点的内容。

3、为行节点指定名称,替换掉默认的row,只需要为path 传递一个参数

select 1+1 ,2+2 for xml path(‘常量测试‘)

4、为列指定名称:为列起一个别名

select 1+1 as ‘列1‘ ,2+2 as ‘列2‘ for xml path(‘常量测试‘)

结果如下:

5、行转列,以上面的表格为例。

select 市,left(所辖县,LEN(所辖县)-1)所辖县 from
(
    select 市,(
            select 县+‘、‘ from  SZQCSBJ where 市=A.市 for XML path(‘‘)
        )所辖县
    from SZQCSBJ A
    group by 市
)B

结果如图:

  

说明:

  首先执行子查询:select 县+‘、‘ from  SZQCSBJ where 市=A.市 for XML path(‘‘)

  利用外部查询传递的 列 市 的数据,将该市的所有县查询出来,由于 县+‘、‘ 并不是直接从表中查询来的,并且没有起一个列名,所以就没有列相关的节点名。同时将行节点命名为空字符‘‘,所以也没有行节点,得到结果 ‘长清、‘,在后续的处理中将最后一个 ‘、‘ 字符去掉,就实现了行转列的目的

时间: 2024-11-08 23:19:05

SqlServer——for xml path的相关文章

sqlserver - FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path(&#39;&#39;)

有这么一个表 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') insert into tb values(3, 'ddd') insert int

SqlServer 中 for xml path 相关

表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"', TypeDesc + '"}',',' FROM dbo.SYS_DicEnumType FOR XML PATH('') 这样就可以得到一个比较接近 JSON 格式的字符串,如下: {"Gender":"性别"},{"Degree":

SQLServer中的cross apply和FOR XML PATH

参考: FOR XML PATH:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html cross apply:http://www.cnblogs.com/Leo_wl/archive/2013/04/02/2997012.html 应用: FOR XML PATH,可以在group by 语句中,合并非group字段,例如:查询每个学生对应的课程(多个课程使用逗号隔开) cross apply,可以查询A表的同时

问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH

灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果

使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理

在一个医药行业的系统中需要根据患者的接触记录ID获取不同接触类型的集合,效果像这样 --患者接触记录信息,一个患者可以有N个不同的接触记录,每个接触记录又有N个接触类型记录 IF OBJECT_ID ('dbo.TEST') IS NOT NULL DROP TABLE dbo.TEST GO CREATE TABLE dbo.TEST ( ID INT IDENTITY (1000,1) NOT NULL, cid INT,--接触记录号 REMARK VARCHAR (4000), CONT

sql for xml path 和group_concat

/*sqlserver*/ select Id,AId,(SELECT IMEI+',' FROM Device as s WHERE s.Id=c.Id For XML Path('')) AS IMEI from Device as c /*mysql*/ select AId,(SELECT group_concat(IMEI) FROM Device as s WHERE s.AId=c.AId ) AS IMEI from AccountSettings as c 原文地址:https

灵活运用 SQL SERVER FOR XML PATH

FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主. 一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下: 接下来我们来看应用FOR XML PATH的查询结果语句如下: SELECT * FROM @hobby FO

SQL FOR XML PATH 和 Stuff 用法

sql stuff 用法 1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,character_expression ) 3.示例 以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串 SELECT STUFF('abcdef', 2, 3, 'ijklmn')GO 下面是结果集 a