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

mac2022-06-30  19

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语句,结果如下图:

 

转载于:https://www.cnblogs.com/zoro-zero/p/3898894.html

最新回复(0)