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. cobbler无人值守自动安装

      无人值守安装(自动按定制的需求来批量安装linux系统) kickstart cobbler linux安装系统的方法: 1,光盘 把iso镜像刻录(windows下有类似nero这类软件)到光盘 ...

  2. thinkphp5 上传服务器后 Access denied

    服务器报 Access denied,要么报 No input files,但是在网上查了查说是将 PHP 的cgi.fix_pathinfo 改成 1 即可,但是改成 1 显然是有解析漏洞的,尝试寻 ...

  3. MongoDb 命令查询所有数据库列表

    原文:http://blog.csdn.net/huxu981598436/article/details/47216493 MongoDb 命令查询所有数据库列表 CODE: > show d ...

  4. codeblocks: 使用动态链接库(pcre)的配置

    说明:在c/c++程序中使用动态链接库, 编译后需要相关的dll文件(如:libpcre-1.dll,libpcreposix-0.dll)才能正常的运行. 2014-06-27

  5. 关于Java中扫描仪next()与nextLine()的区别

    首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后 ...

  6. undefined is not an object(evaluating '_react3.default.PropTypes.shape)

    手机红屏报这个错时的解决办法: npm uninstall --save react-native-deprecated-custom-components npm install --save ht ...

  7. Gym - 101755G Underpalindromity (树状数组)

    Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...

  8. String 中常用的几种方法

    /* String(char[] value)传递字符数组 将字符数组转换为字符串 字符数组不查询编码表 */ public static void fun1(){ char[] ch = {'a', ...

  9. qml性能优化(来源于群友分享);

    Qt quick性能优化 使用时间驱动 避免定时轮询: 使用信号槽形式: 使用多线程 C++; QML WorkerScript元件: 使用Qt Quick Compiler 只需要再PRO文件中添加 ...

  10. GDB调试qemu-kvm

    GDB调试qemu-kvm 前面几篇博文都是记录一些kvm相关包编译安装及使用,但都没深入去代码看看.看源码在配合上相关原理才能更好的理解kvm.但qemu-kvm的代码量很多,对我来讲直接看源码收获 ...