首页 > 代码库 > sql server 横向转丛向及FOR XML PATH使用
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 ‘物理‘fromt_scoregroup 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, scorefrom 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_scoregroup by name
使用上面SQL语句,结果如下图:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。