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('')
利用外部查询传递的 列 市 的数据,将该市的所有县查询出来,由于 县+'、' 并不是直接从表中查询来的,并且没有起一个列名,所以就没有列相关的节点名。同时将行节点命名为空字符'',所以也没有行节点,得到结果 '长清、',在后续的处理中将最后一个 '、' 字符去掉,就实现了行转列的目的
SqlServer——for xml path的更多相关文章
- sqlserver - FOR XML PATH
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主 ...
- sqlserver -- 学习笔记(八)体验charindex、stuff 和 for xml path在实际问题中的应用及几个问题的探讨
写在前面 之前做了个微信端顾客扫码评价员工的功能,除了打分数,还可以打标签. 需要统计分数和统计各个员工每种标签被点击的次数. 后来加了个要求,需要查看客户对某个员工一次服务所打出的标签组合. 在不 ...
- SQLSERVER利用FOR XML PATH实现分组拼接字符串
首先看一下数据结构表 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL) DROP TABLE #tProduct SELECT * INTO #tProduc ...
- SQLServer中sql for xml path 的用法
我们通常需要获取一个多行的某个字段拼出的字符串,我们可以使用for xml path进行处理:下面将介绍for xml path的具体用法: 创建测试表&插入测试数据 在数据库中新增测试表 C ...
- SqlServer 中 for xml path 相关
表结构: typename varchar(50) typedesc varchar(50) 示例 SQL 语句: SELECT '{"'+TypeName, '":"' ...
- SQLServer中的cross apply和FOR XML PATH
参考: FOR XML PATH:http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html cross apply:http ...
- sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
SQL 列转行,即多行合并成一条 需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...
- 问题:sqlserver有没有类似Oracle的LISTAGG;结果: 灵活运用 SQL SERVER FOR XML PATH
灵活运用 SQL SERVER FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前 ...
- 多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
有这么一个表 )) , 'aa') , 'bb') , 'aaa') , 'bbb') , 'ccc') , 'ddd') , 'fff') ...
随机推荐
- Activiti 教程
Activiti入门教程:http://blog.csdn.net/column/details/activitizhou.html Activiti 5.15 用户手册:http://www.cnb ...
- 任务调度 Spring Task 4(二 )
注解和配置文件两种 第一种:配置文件方式 第一步:编写作业类 即普通的pojo,如下: import org.springframework.stereotype.Service; @Service ...
- WMS专业名词解释
1.摘果:按照单一客户上订单的内容进行拣选货品(即去货位上拣货),拣选完成后即可直接进行质检.包装. 2.播种:将多个客户订单上的货品进行汇总,然后对这些货品进行拣选.拣选完成后,再区分出每一个客户的 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- poj2378(dfs,树形dp)
和poj3107,poj1655一样的方法 #include<iostream> #include<cstdio> #include<cstdlib> #inclu ...
- 初识django框架
django框架 1.框架介绍 根据第一部分内容介绍,我们可以总结出一个web框架应该包含如下三部分:a.sockect服务.b.根据不同的url调用不同函数(包含逻辑).c.返回内容(模板渲染).常 ...
- 为什么新生代内存需要有两个Survivor区?
对于常见的GC算法,我们都应该知道,例如:标记清除算法.复制算法.标记整理算法等.标记清除算法由于回收之后存在大量的内存碎片,存在效率和空间问题!为了解决效率问题,引出了复制算法!熟悉GC算法的小伙伴 ...
- numpy之通用函数ufunc
通用函数-元素级数组函数 通用函数(ufunc)是一种对ndarray执行元素级运算的函数. 一元ufunc import numpy as np arr = np.arange(-10,10,2) ...
- (转)从android一个apk中启动第三方apk应用
从android一个apk中启动第三方apk应用 我们在开发中,经常遇到遇到在一个apk中要去运行另外一个apk,就像我们windows一样,搞一个快捷方式一样,那怎么实现呢? 问题的核心点在于我们要 ...
- React组件传值方式总结
1. 子组件向父组件传值 父组件Header: import Nav from 'Nav.js'; class Header extends React.Component { constructor ...