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使用的更多相关文章

  1. SQL Server横向扩展:设计,实现与维护(2)- 分布式分区视图

    为了使得朋友们对分布式分区视图有个概念,也为了方便后面的内容展开,我们先看看下面一个图:     讲述分布式分区视图之前,很有必要将之与我们常常熟悉的分区表和索引进行区别. 首先,分布式分区视图是一个 ...

  2. 在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表

    本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html 最近这段时间在Sql Server 2005下做了很多根据 ...

  3. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

    XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你 ...

  4. Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

    XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB&qu ...

  5. SQL server高级语法

    1. 公共表达式CTE 公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达 ...

  6. SQL Server 2012 联机丛书离线安装

    昨日根据微软官网的方式安装SQL Server 2012 联机丛书报错,无法安装: 联机丛书下载位置及安装方式: 按照给出的方式安装,无法完成,错误如下:

  7. sql server中对xml进行操作

    一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XM ...

  8. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  9. 为sql server 增加 parseJSON 和 ToJSON 函数

    在SqlServer中增加Json处理的方法 Sql Server 存储非结构话数据可以使用xml类型,使用xpath方式查询,以前写过一篇随笔:Sql Server xml 类型字段的增删改查 除了 ...

随机推荐

  1. 微信支付退款(PHP后端)

    应用场景 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上. 微信 ...

  2. http://bsideup.blogspot.com/2015/04/spring-boot-thrift-part3.html

    Building Microservices with Spring Boot and Apache Thrift. Part 3. Asynchronous services Posted on 4 ...

  3. 洛谷P2261 余数求和

    整除分块的小应用. 考虑到 k % x = k - (k / x) * x 所以把 x = 1...n 加起来就是 k * n - (k / i) * i i = 1...k(注意这里是k) 对于这个 ...

  4. 【CH0103】最短哈密顿路径

    题目大意:给定一个 N 个点的无向图,点有点权,求从 0 号点走到 N-1 号点的最短哈密顿路径是多少. 题解:由于哈密顿路径的定义是每个顶点必须经过且仅能经过一次,因此,可用当前是否经过了这些点和当 ...

  5. (转)c++ 回调函数

    https://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 今天讨论下C/C++中的回调函数. 在理解“回调 ...

  6. JS 判断各种设备,各种浏览器

    话不多说,直接看代码 1.区分Android.iphone.ipad: var ua = navigator.userAgent.toLowerCase(); if (/android|adr/gi. ...

  7. Linux系统调用之内存管理

    brk 改变数据段空间的分配 sbrk 参见brk mlock 内存页面加锁 munlock 内存页面解锁 mlockall 调用进程所有内存页面加锁 munlockall 调用进程所有内存页面解锁 ...

  8. Failed to execute aapt:Process 'command '/build-tools/28.0.2/aapt'' finished with non-zero exit value 1

    Caused by: com.android.ide.common.process.ProcessException: Error while executing process /Users/hou ...

  9. Luogu P2613 【模板】有理数取余

    题目链接 \(Click\) \(Here\) 真心没啥东西,只要能\(Get\)到在数字输入的时候按位取模,以及除数也可以直接取模就可以了.(把每个数看做乘法原理和加法原理构造起来的即可.) #in ...

  10. win命令大全

    Windows系统:开始--运行--命令大全 Nslookup-------IP地址侦测器                       explorer-------打开资源管理器 logoff--- ...