首页 > 数据库技术 > 详细

sql server 横向转丛向及FOR XML PATH使用

时间:2014-08-08 12:23:35      阅读:401      评论:0      收藏:0      [点我收藏+]

1、开始数据结构如下:

bubuko.com,布布扣

2、转为如下图:

bubuko.com,布布扣

使用如下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、以及转为如下图:

bubuko.com,布布扣

  (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=张三 FOR XML PATH(‘‘)),1,1,‘‘) 科目
from 
t_score
group by name

使用上面SQL语句,结果如下图:

bubuko.com,布布扣

 

sql server 横向转丛向及FOR XML PATH使用,布布扣,bubuko.com

sql server 横向转丛向及FOR XML PATH使用

原文:http://www.cnblogs.com/zoro-zero/p/3898894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!