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('')

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

SqlServer——for xml path的更多相关文章

  1. sqlserver - FOR XML PATH

    FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...

  2. sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨

    写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合.  在不 ...

  3. SQLSERVER利用FOR XML PATH实现分组拼接字符串

    首先看一下数据结构表 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL) DROP TABLE #tProduct SELECT * INTO #tProduc ...

  4. SQLServer中sql for xml path 的用法

    我们通常需要获取一个多行的某个字段拼出的字符串,我们可以使用for xml path进行处理:下面将介绍for xml path的具体用法: 创建测试表&插入测试数据 在数据库中新增测试表 C ...

  5. SqlServer 中 for xml path 相关

    表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...

  6. SQLServer中的cross apply和FOR XML PATH

    参考: FOR XML PATH:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html cross apply:http ...

  7. sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)

    SQL 列转行,即多行合并成一条   需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...

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

    灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前 ...

  9. 多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')

    有这么一个表 )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') , 'ddd') , 'fff')                               ...

随机推荐

  1. Cassandra key说明——Cassandra 整体数据可以理解成一个巨大的嵌套的Map Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

    Cassandra之中一共包含下面5种Key: Primary Key Partition Key Composite Key Compound Key Clustering Key 首先,Prima ...

  2. js & jquery数组介绍

    (转自:http://www.jb51.net/article/30793.htm) 1.数组的创建 var arr=new Array(); 2.查找数组中的元素 for(var i=0;i< ...

  3. 在ubuntu14.4里编译UBOOT出错

    出错信息如下: OBJCOPY examples/standalone/hello_world.bin  LDS     u-boot.lds  LD      u-boot./scripts/dtc ...

  4. Kali Linux ettercap的使用

    ettercap是执行ARP欺骗嗅探的工具,通常用它来施行中间人攻击. 我还介绍过另一个arp欺骗工具-arpspoof 我使用的是Kali Linux 2.0:在开始使用ettercap之前,先配置 ...

  5. 细说 const

    1.const 简单应用 const int pp=0 //pp 为整形常量,不能修改 还有另外一种不常用的方式 但是最容易误导 int const pp=0 //pp 为整形常量,不能修改 记住这两 ...

  6. 数据结构之最小生成树Prim算法

    普里姆算法介绍 普里姆(Prim)算法,是用来求加权连通图的最小生成树算法 基本思想:对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G的最 ...

  7. kali视频学习(6-10)

    第三周 kali视频(6-10)学习 6.信息搜集之主机探测 7.信息搜集之主机扫描(nmap使用) 8.信息搜集之指纹识别 9.信息搜集之协议分析 10.漏洞分析之OpenVAS安装 6.信息搜集之 ...

  8. The type org.springframework.context.ConfigurableApplicationContext cannot be resolved问题解决

    在搭建maven项目的时候,有时候会报这样的问题. The type org.springframework.context.ConfigurableApplicationContext cannot ...

  9. mysql存入GBK编码字段信息

    set @moneyStr=BASE64_ENCODE(CONVERT(CONCAT('线上报名且已交费',money,'元') using GBK));

  10. bzoj 2946 [Poi2000]公共串——后缀自动机

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2946 对每个串都建一个后缀自动机,然后 dfs 其中一个自动机,记录同步的话在别的自动机上走 ...