SQL中FOR XML PATH 语句[可用于分组统计]

简介: FOR XML PATH 语句 :(应该在sql2005及以上版本才能用) declare @t table(id int,name varchar) insert into @t(id,name) values(1,'a') insert into @...

FOR XML PATH 语句 :(应该在sql2005及以上版本才能用)

declare @t table(id int,name varchar)
insert into @t(id,name) values(1,'a')
insert into @t(id,name) values(2,'b')

select id,name from @t for xml path

运行结果如下:

<row>
  <id>1</id>
  <name>a</name>
</row>
<row>
  <id>2</id>
  <name>b</name>
</row>


 

select id,name from @t for xml path('node')

运行结果如下:

<node>
  <id>1</id>
  <name>a</name>
</node>
<node>
  <id>2</id>
  <name>b</name>
</node>


下面我要做一个分组统计:

declare @student table(class varchar(10),name varchar(10))
insert into @student(class,name) values('1班','张三')
insert into @student(class,name) values('2班','李四')
insert into @student(class,name) values('1班','王五')
insert into @student(class,name) values('2班','郭佳')
insert into @student(class,name) values('3班','吴亮')

select 
class,
STUFF((select ','+name from @student where class=stu.class for xml path('')),1,1,'') names 
from @student stu
group by class
order by class


运行结果如下:

1班   张三,王五
2班   李四,郭佳
3班   吴亮

同样的效果还可以换一种方式实现:

select class,RIGHT(names,LEN(names)-1) from
(
	select 
	class,
	(select ','+name from @student where class=stu.class for xml path('')) names 
	from @student stu
	group by class
	
) stu
order by class


运行结果如下:

1班   张三,王五
2班   李四,郭佳
3班   吴亮

 
STUFF用法

1、作用

删除指定长度的字符,并在指定的起点处插入另一组字符。

2、语法

STUFF ( character_expression , start , length ,character_expression )

3、示例

以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串

SELECT STUFF('abcdef', 2, 3, 'ijklmn')
GO

下面是结果集

aijklmnef

 


 

 

 


 

相关文章
|
2月前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
50 2
|
6天前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
19 0
|
10天前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
1月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
39 1
|
3月前
|
SQL 数据挖掘 数据库
SQL分组函数
【7月更文挑战第24天】SQL分组函数
31 1
|
2月前
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
37 0
|
2月前
|
SQL
SQL SERVER数据分组后取第一条数据——PARTITION BY
SQL SERVER数据分组后取第一条数据——PARTITION BY
108 0
|
3月前
|
SQL 数据库
【SQL】已解决:SQL分组去重并合并相同数据
【SQL】已解决:SQL分组去重并合并相同数据
71 1
|
3月前
|
SQL 关系型数据库 MySQL
MySQL获取分组里的最新数据如何写sql
MySQL获取分组里的最新数据如何写sql
43 0
|
4月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
42 3