sql server 横向转丛向及FOR XML PATH使用
1、开始数据结构如下:

2、转为如下图:

使用如下SQL语句:
---横向转丛向
select
name '姓名',
max(case when course='语文' then score end) as '语文',
max(case when course='数学' then score end) as '数学',
max(case when course='物理' then score end) as '物理'
from
t_score
group by name
3、以及转为如下图:

(1)stuff函数
STUFF 函数将字符串插入到另一个字符串中。 它从第一个字符串的开始位置删除指定长度的字符;然后将第二个字符串插入到第一个字符串的开始位置。
select stuff(' world',1,0,'hello') --hello world
(2)FOR XML PATH函数
select *from t_score for xml path
结果如下:
<row>
<id>1</id>
<name>张三</name>
<course>语文</course>
<score>73</score>
</row>
<row>
<id>2</id>
<name>张三</name>
<course>数学</course>
<score>83</score>
</row>
<row>
<id>3</id>
<name>张三</name>
<course>物理</course>
<score>93</score>
</row>
<row>
<id>4</id>
<name>李四</name>
<course>语文</course>
<score>74</score>
</row>
<row>
<id>5</id>
<name>李四</name>
<course>数学</course>
<score>84</score>
</row>
<row>
<id>6</id>
<name>李四</name>
<course>物理</course>
<score>94</score>
</row>
select *from t_score for xml path('Mygrades')
结果如下:
<Mygrades>
<id>1</id>
<name>张三</name>
<course>语文</course>
<score>73</score>
</Mygrades>
<Mygrades>
<id>2</id>
<name>张三</name>
<course>数学</course>
<score>83</score>
</Mygrades>
<Mygrades>
<id>3</id>
<name>张三</name>
<course>物理</course>
<score>93</score>
</Mygrades>
<Mygrades>
<id>4</id>
<name>李四</name>
<course>语文</course>
<score>74</score>
</Mygrades>
<Mygrades>
<id>5</id>
<name>李四</name>
<course>数学</course>
<score>84</score>
</Mygrades>
<Mygrades>
<id>6</id>
<name>李四</name>
<course>物理</course>
<score>94</score>
</Mygrades>
select
name,
course,
score
from t_score for xml path('Mygrades')
结果如下:
<Mygrades>
<name>张三</name>
<course>语文</course>
<score>73</score>
</Mygrades>
<Mygrades>
<name>张三</name>
<course>数学</course>
<score>83</score>
</Mygrades>
<Mygrades>
<name>张三</name>
<course>物理</course>
<score>93</score>
</Mygrades>
<Mygrades>
<name>李四</name>
<course>语文</course>
<score>74</score>
</Mygrades>
<Mygrades>
<name>李四</name>
<course>数学</course>
<score>84</score>
</Mygrades>
<Mygrades>
<name>李四</name>
<course>物理</course>
<score>94</score>
</Mygrades>
select
course+';'
from t_score where name='张三' for xml path('')
--结果:语文;数学;物理; select
'['+course+']'
from t_score where name='张三' for xml path('')
--结果:[语文][数学][物理]; select
'{'+course+'}'
from t_score where name='张三' for xml path('')
--结果:{语文}{数学}{物理};
select
name '姓名',
stuff((SELECT ';'+course FROM t_score where name=t.name FOR XML PATH('')),1,1,'') '科目'
from
t_score t
group by name
使用上面SQL语句,结果如下图:

sql server 横向转丛向及FOR XML PATH使用的更多相关文章
- SQL Server横向扩展:设计,实现与维护(2)- 分布式分区视图
为了使得朋友们对分布式分区视图有个概念,也为了方便后面的内容展开,我们先看看下面一个图: 讲述分布式分区视图之前,很有必要将之与我们常常熟悉的分区表和索引进行区别. 首先,分布式分区视图是一个 ...
- 在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表
本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html 最近这段时间在Sql Server 2005下做了很多根据 ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据
XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你 ...
- Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集
XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...
- SQL server高级语法
1. 公共表达式CTE 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达 ...
- SQL Server 2012 联机丛书离线安装
昨日根据微软官网的方式安装SQL Server 2012 联机丛书报错,无法安装: 联机丛书下载位置及安装方式: 按照给出的方式安装,无法完成,错误如下:
- sql server中对xml进行操作
一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...
- 在SQL Server中将数据导出为XML和Json
有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...
- 为sql server 增加 parseJSON 和 ToJSON 函数
在SqlServer中增加Json处理的方法 Sql Server 存储非结构话数据可以使用xml类型,使用xpath方式查询,以前写过一篇随笔:Sql Server xml 类型字段的增删改查 除了 ...
随机推荐
- poj 3414 Pots(bfs+输出路径)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- js 调试技巧
快捷键 1.快速查看HTML中dom元素绑定那些JS事件方法 chrome中 F12-->Elements-->Event Listenners 参考:https://jingy ...
- django2 用iframe标签完成 网页内嵌播放b站视频功能
前言: 给自己的网站中加入视频资源,有两种方法,一种是用iframe标签引用外站资源,另一种则使用video标签,获取站内资源进行视频播放.其中前者顾名思义,是将视频资源上传到视频网站中,然后通过引用 ...
- 基本数据类型补充,深浅copy
#str s=' ' #只能是以至少一个空格组成的字符串(全空格) print(s.isspace()) #tuple 当元组只有一个元素组成,并没有",",则该元素是什么数据类型 ...
- strutrs contextMap
contextMap(非常重要) 1.动作类的生命周期 明确:动作类是多例的,每次动作访问,动作类都会实例化.所以是线程安全的.与Struts1的区别是,struts1的动作类是单例的. 2.请求动作 ...
- (最长回文子串 线性DP) 51nod 1088 最长回文子串
输入一个字符串Str,输出Str里最长回文子串的长度. 回文串:指aba.abba.cccbccc.aaaa这种左右对称的字符串. 串的子串:一个串的子串指此(字符)串中连续的一部分字符构成的子(字符 ...
- (贪心 模拟?) codeVs1098 均分纸牌
题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必为 N 的倍数.可以在任一堆上取若于张纸牌,然后移动. 移牌规则为:在编号为 1 堆上取的纸 ...
- opencv: 线性拟合
opencv提供了fitline函数用于直线拟合,原型为: C++: void fitLine(InputArray points, OutputArray line, int distType, d ...
- perl trick
一.die if以及文件的操作 #!/usr/bin/perl -w use strict; die "USAGE:\n\tperl $0 <><><>\ ...
- RocketMQ_问题_启动报错,修改堆内存大小
1.启动broker报错 虚拟机内存小,导致虚拟机中的JVM内存小,进而在启动broker时分配JVM内存遇到问题 查询网上得知,查看/usr/local/rocketmq-all-4.3.0/dis ...