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. Python学习day3 数据类型Ⅰ(str,int,bool)

    day3  数据类型 @上节内容补充 每周一个思维导图-xmind.exe in / not in #示例:(是否包含敏感字符)while True:    text = input('请输入你要说的 ...

  2. 【译】4. Java反射——字段

    原文地址:http://tutorials.jenkov.com/java-reflection/fields.html ======================================= ...

  3. c#中数组的总结

    Array数组: 基本定义:string[] Scences={"sky","star","sun"}  或者 int[] Scences= ...

  4. php中函数里面使用函数外面的变量

    一定要在函数里面声明为全局变量!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(不然会有问题,还是不报错的那种)

  5. Prometheus+AlertManager实现邮件报警

    AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 参考配置: global: smtp_smartho ...

  6. 用jQuery写的轮播图

    效果图: GitHub地址:https://github.com/123456abcdefg/Javascript 大家可以下载源码查看. 与前一篇写的轮播图实现的效果一致,这个是用jQuery写的, ...

  7. 【MSSQL】SQL Server 设置用户只能查看并访问特定数据库

    #背景 SQL Server实例上有多个服务商的数据库,每个数据库要由各自的服务商进行维护, 为了限定不同服务商商的维护人员只能访问自己的数据库,且不能看到其他服务商的数据库,现需要给各个服务商商限定 ...

  8. Visual Studio连接到TFS

    我在学校自己使用git,公司使用VSS,然后这个项目又使用TFS.Visual Studio连接到TFS是这样滴 1.点连接到团队项目 2.添加TFS服务器的url,写到你的http:XXX/tfs就 ...

  9. Dubbo管控台安装(zookeeper集群)

    Dubbo管控台可以对注册到zookeeper注册中心的服务或服务消费者进行管理,但管控台是否正常对Dubbo服务没有影响,管控台也不需要高可用,因此节点部署   环境:Centos6.6.IP:10 ...

  10. centos 6.5 ruby环境安装

    redis3.0以上支持集群,自带集群管理工具redis-trib.rb:在搭建集群前,安装ruby环境 ruby安装包下载 安装开发工具 1.命令:yum groupinstall "De ...