zoukankan      html  css  js  c++  java
  • 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语句,结果如下图:

  • 相关阅读:
    02数组基本操作
    01数组创建
    java流程控制
    assignment1
    Lecture 1: Introduction
    Lecture 14:Radial Basis Function Network
    Lecture 13:Deep Learning
    机器学习基石笔记16——机器可以怎样学得更好(4)
    机器学习基石笔记15——机器可以怎样学得更好(3)
    机器学习基石笔记14——机器可以怎样学得更好(2)
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/3898894.html
Copyright © 2011-2022 走看看