灵活运用 SQL Server 数据库的 FOR XML PATH
起因¶
今天欧阳冰提出一个报表需求,其核心部分可以简化为这样一张表格:
调度单号 | 与调度单相关的多张作业单号 |
001 | 0001/0002/0003 |
002 | 0004 |
003 | 0005/0006/0007/0008 |
从上述表格可以看出,如何把调度单的多行作业单明细的单号合并到同一行的一个字段中,并用斜杠 / 分隔,是这个需求的难点。
解决¶
于是到网上去搜索了一下,有这样一篇文章:灵活运用 SQL SERVER FOR XML PATH
其中介绍了 SQL Server 数据库的 FOR XML PATH 关键字的用法。
在一句 SELECT 语句的最后加上 FOR XML PATH,就可以把整个结果数据集变成一个 xml 字符串。大家可以自行尝试一下。
而如果使用 FOR XML PATH(''),则是去除所有 xml 节点标记,只剩下原原本本的数据。我们要的就是这个。
于是,我们可以写 SQL:
SELECT DH.DH_DISPATCH_NO DISPATCH_NO, ( SELECT CLH.CLH_CARGO_LOAD_NO + '/' FROM TM_DISPATCH_CARGO_LOAD_L DCLL, TM_CARGO_LOAD_H CLH WHERE DH.BILLID = DCLL.BILLID AND DCLL.DCLL_CARGO_LOAD_HEADER_ID = CLH.BILLID FOR XML PATH('') ) NOS FROM TM_DISPATCH_H DH GROUP BY DH.BILLID, DH.DH_DISPATCH_NO ;
这样就已经差不多了,但是多张作业单号这一列最后总是多个斜杠 /。
为了把最后这个斜杠去掉,我们还要使用一下 LEFT 函数。那么最终可以使用这样一句 SQL 来满足上述需求:
SELECT DISPATCH_NO, LEFT(NOS, LEN(NOS)-1) CARGO_LOAD_NOS FROM ( SELECT DH.DH_DISPATCH_NO DISPATCH_NO, ( SELECT CLH.CLH_CARGO_LOAD_NO + '/' FROM TM_DISPATCH_CARGO_LOAD_L DCLL, TM_CARGO_LOAD_H CLH WHERE DH.BILLID = DCLL.BILLID AND DCLL.DCLL_CARGO_LOAD_HEADER_ID = CLH.BILLID FOR XML PATH('') ) NOS FROM TM_DISPATCH_H DH GROUP BY DH.BILLID, DH.DH_DISPATCH_NO ) TMP ORDER BY DISPATCH_NO ;
转载于:https://www.cnblogs.com/suding1188/archive/2012/03/12/2391673.html
灵活运用 SQL Server 数据库的 FOR XML PATH相关推荐
- sql limit 子句_SQL Server中的FOR XML PATH子句
sql limit 子句 As SQL professionals, we often have to deal with XML data in our databases. This articl ...
- SQL Server数据库字段类型详解
1.字符串类型 Char char数据类型用来存储指定长度的定长非统一编码型的数据.当定义一列为此类型时,你必须指定列长.当你总能知道要存储的数据的长度时,此数据类型很有用.例如,当你按邮政编码加4个 ...
- Visual C# 2008+SQL Server 2005 数据库与网络开发--9.1.1 SQL Server 2005中的XML功能
在SQL Server 2005中,对XML的支持已经集成到数据库本身的所有组件中,主要包括以下几方面. 支持XML格式的数据类型. 可以对XML格式的数据或者变量进行XQuery的查询. 增强了XM ...
- SQL SERVER 数据库邮件配置
1.简单了解数据库邮件的概念和使用的传输协议及系统体系: 数据库邮件是从 SQL Server 数据库引擎中发送电子邮件的企业解决方案.通过使用数据库邮件,数据库应用程序可以向用户发送电子邮件.邮件中 ...
- 今天在webcasts上看sql server 2008的新功能介绍,无意中发现在连接sql server 数据库时,还有一个...
今天在webcasts上看sql server 2008的新功能介绍,无意中发现在连接sql server 数据库时,还有一个 Failover Partner的选项.以前都没注意过,它的主要功能就是 ...
- 如何对两个大型SQL Server数据库中的数据进行快速估计比较,以查看它们是否相等
Bringing impactful analysis into a data always comes with challenges. In many cases, we rely on auto ...
- 使用PowerShell和Windows任务计划程序备份Linux SQL Server数据库
This article is an in-depth guide on how PowerShell can be used to maintain and manage SQL backup on ...
- SQL Server数据库备份和还原报告
In the previous articles, we discussed several ways of taking backup and testing the restore process ...
- Debezium系列之:使用Debezium接入SQL Server数据库数据到Kafka集群的详细技术文档
Debezium系列之:使用Debezium接入SQL Server数据库数据到Kafka集群的详细技术文档 一.Debezium概述 二.SQL Server 连接器的工作原理 1.Snapshot ...
最新文章
- CentOS7 php7.0 升级到php7.3
- c语言自动生成版本号,单片机C程序自动产生并增加版本号
- C# DateTimePicker控件如何精确设置显示时分秒
- 记一次configuration wizard运行失败
- 软件性能-概念、关注点、术语
- 久游遭受重创的ng2b
- 掌握后可为孩子收藏的MySQL入门全套
- c语言 字符串 正序再倒序_python字符串
- cifs mount fail
- Linux用php上传表单文件,文件太大提示[413 Request Entity Too Large]
- 继承ActionSupport类
- 安装AdventureWorks2008R2示例数据库
- Quidway S系列交换机
- 局域网组网 | 交换机常用命令
- 为构建大型复杂系统而生的微服务框架 Erda Infra
- wp后台页面切换慢,打开速度慢:jquery-ui.min.css加载失败——在国外
- Win10玩方舟生存进化崩溃怎么办?
- 关于给hexo博客增加节日气氛主题切换(包括中国春节和圣诞节)
- JPA事务问题Executing an update/delete query
- 推荐微信小程序常用的几个UI组件库
热门文章
- Java并发编程(五):Java线程安全性中的对象发布和逸出
- [转]COPY OR MOVE FILES AND FOLDERS USING OLE AUTOMATION
- poj 3090 amp;amp; poj 2478(法雷级数,欧拉函数)
- nginx配置反向代理解决前后端分离跨域问题
- codeforces——Little Pony and Expected Maximum
- 查看 PHP apache nginx mysql 是如何编译的
- 通向架构师的道路(第十七天)IBM Websphere集群探秘-WASND
- Ryu oslo学习总结
- OSCache-JSP页面缓存(2)
- linux中的umask 函数