sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)

測试环境:sql 08, 08 R2, 2010,  2012, 2014 等

declare @agent table
(
AgentID int,
Fname varchar(5),
SSN varchar(11)
) insert into @agent
select 1, 'Vimal', '123-23-4521' union all
select 2, 'Jacob', '321-52-4562' union all
select 3, 'Tom', '252-52-4563' declare @address table
(
AddressID int,
AddressType varchar(12),
Address1 varchar(20),
Address2 varchar(20),
City varchar(25),
AgentID int
) insert into @address
select 1, 'Home', 'abc', 'xyz road', 'RJ', 1 union all
select 2, 'Office', 'temp', 'ppp road', 'RJ', 1 union all
select 3, 'Home', 'xxx', 'aaa road', 'NY', 2 union all
select 4, 'Office', 'ccc', 'oli Com', 'CL', 2 union all
select 5, 'Temp', 'eee', 'olkiu road', 'CL', 2 union all
select 6, 'Home', 'ttt', 'loik road', 'NY', 3 --SELECT
-- 1 AS Tag,
-- NULL AS Parent,
-- 0 AS 'Agents!1!Sort!hide',
-- NULL AS 'Agents!1!',
-- NULL AS 'Agent!2!AgentID',
-- NULL AS 'Agent!2!Fname!Element',
-- NULL AS 'Agent!2!SSN!Element',
-- NULL AS 'AddressCollection!3!Element',
-- NULL AS 'Address!4!!xml',
-- NULL AS 'Address!4!AddressType!Element',
-- NULL AS 'Address!4!Address1!Element',
-- NULL AS 'Address!4!Address2!Element',
-- NULL AS 'Address!4!City!Element'
--UNION ALL
-- SELECT
-- 2 AS Tag,
-- 1 AS Parent,
-- AgentID * 100,
-- NULL, AgentID, Fname, SSN,
-- NULL, NULL, NULL, NULL, NULL, NULL
--FROM @Agent
--UNION ALL
-- SELECT
-- 3 AS Tag,
-- 2 AS Parent,
-- AgentID * 100 + 1,
-- NULL,NULL,NULL,
-- NULL,
-- NULL,
-- NULL, NULL, NULL, NULL, NULL
--FROM @Agent
--UNION ALL
--SELECT
-- 4 AS Tag,
-- 3 AS Parent,
-- AgentID * 100 + 2,
-- NULL, NULL, NULL, NULL, NULL,
-- '<!-- ' + AddressType + ' Address -->', AddressType,
-- Address1, Address2, City
--FROM @Address
--ORDER BY [Agents!1!Sort!hide]
--FOR XML EXPLICIT SELECT
1 AS Tag,
NULL AS Parent,
NULL AS [Agents!1!],
NULL AS [Agent!2!AgentID],
NULL AS [Agent!2!Fname!Element],
NULL AS [Agent!2!SSN!Element],
NULL AS [AddressCollection!3!Element],
NULL AS [Address!4!AddressType!Element],
NULL AS [Address!4!Address1!Element],
NULL AS [Address!4!Address2!Element],
NULL AS [Address!4!City!Element] UNION ALL SELECT
2 AS Tag,
1 AS Parent,
NULL, AgentID, Fname, SSN,
NULL,NULL, NULL, NULL, NULL
FROM @Agent UNION ALL SELECT
3 AS Tag,
2 AS Parent,
NULL,AgentID,NULL, NULL,
NULL, NULL, NULL, NULL, NULL FROM @Agent UNION ALL SELECT
4 AS Tag,
3 AS Parent,
NULL,AgentID,NULL,NULL,NULL,
AddressType, Address1, Address2, City FROM @Address ORDER BY
-- all properties of every agent
-- (from tag 2 and 4: SSN, fname and adresses)
-- will be sorted by agentID and combined into
-- separate groups. It is necessary in same cases.
[Agent!2!AgentID],
[AddressCollection!3!Element], -- optional because NULL everywhere
[Address!4!AddressType!Element]-- any ordering by elements of tag 4 FOR XML EXPLICIT

执行结果:

文章来源:http://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/97f79941-324e-479e-ba5b-851cc534ebe5/problem-in-for-xml-explicit-query?

forum=sqlxml

sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)的更多相关文章

  1. sql 存储过程 in 的两种写法

    最近又忘记存储过程 除了exec 动态写法的另外一种,这里记录一下,方便查找 写法1,动态语句 CREATE PROCEDURE sp_CountShiftWish @strids varchar ( ...

  2. mybatis-plus 自定义SQL,XML形式,传参的几种方式

    mybatis-plus 自定义SQL,XML形式,传参的几种方式 前提说明 所涉及文件 传参类型说明 1.Java代码中使用QueryWrapper动态拼装SQL 2.简单类型参数(如String, ...

  3. sql语句有几种写法

    sql语句有几种写法 1:SELECT * FROM tablename ORDER BY RAND() LIMIT 想要获取的数据条数: 2:SELECT *FROM `table` WHERE i ...

  4. SQL Server 存储过程的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  5. Sql语句模糊查询字符串的两种写法

    Sql语句模糊查询有两种写法,一种是在jdbcTemplate的查询方法参数里拼接字符串%,一种是在Sql语句里拼接%字符串. public class IsNameDaoImpl implement ...

  6. Android开发系列之button事件的4种写法

    经过前两篇blog的铺垫,我们今天热身一下,做个简单的样例. 文件夹结构还是引用上篇blog的截图. 详细实现代码: public class MainActivity extends Activit ...

  7. 关于MyBatis的两种写法

    刚接触MyBatis是在Jike的视频中学习的,但是之后又发现和项目中的MyBatis的用法不太一致.上网找了好多资料,发现网上的教程分为两种写法: 第一种,是jike视频中的写法,写好map.xml ...

  8. Android笔记---点击事件的四种写法

    Android 点击事件的四种写法: 1. 以内部类的形式实现 OnClickListener 接口.定义点击事件 class MainActivity extents Activity{ // .. ...

  9. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

随机推荐

  1. eclipse中修改了代码编译后执行不起作用

    在网上试了好多方法都没解决 后来,删了eclipse里的服务器,重新创建了一下,重新运行自己的工程发现修改的代码起作用了.

  2. 【习题 7-5 UVA-690】Pipeline Scheduling

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 一定在这里写完思路再敲代码!!! 处理出5个工作单元在哪些时刻会被用到. ->设为initstatu 因为每次都会面临之前已经 ...

  3. Spring学习总结(8)——25个经典的Spring面试问答

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...

  4. JavaBean对象转map

    可能会经常使用的方法,利用反射将javaBean转换为map.稍作改动就可以转为想要的其它对象. /** * obj转map * @param map 转出的map * @param obj 须要转换 ...

  5. 为什么golang的开发效率高(编译型的强类型语言、工程角度高、在开发上的高效率主要来自于后发优势,编译快、避免趁编译时间找产品妹妹搭讪,既是强类型语言又有gc,只要通过编译,非业务毛病就很少了)

    作者:阿猫链接:https://www.zhihu.com/question/21098952/answer/21813840来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...

  6. C++静态库编译

    MFC 选项选择: 静态库编译 增加头文件:( opencv相关的) #pragma once #ifdef WIN32 #include <opencv2/core/version.hpp&g ...

  7. ImportError: No module named tornado.ioloop 记录过程

    ImportError: No module named tornado.ioloop 记录过程 安装 pycurl    pip install pycurl 报错 'curl-config' no ...

  8. python相关系数

    皮尔逊相关系数: 用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间. 几组的点集,以及各个点集中和之间的相关系数.我们可以发现相关系数反映的是变量之间的线性关系和相关性的方向(第一排 ...

  9. Linux学习总结(4)——Centos6.5使用yum安装mysql——快速上手必备

    第1步.yum安装mysql [root@stonex ~]#  yum -y install mysql-server 安装结果: Installed:     mysql-server.x86_6 ...

  10. apache+nginx 实现动静分离

    apache+nginx 实现动静分离 http://blog.csdn.net/xysoul/article/details/50347971