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月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
140 5
|
11月前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
93 2
|
6月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
1815 11
|
8月前
|
SQL
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
开启慢SQL设置long_query_time=0.1为啥会统计的sql却存在小于100毫秒的sql
130 1
|
9月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
107 0
|
9月前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
10月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
151 1
|
12月前
|
SQL 数据挖掘 数据库
SQL分组函数
【7月更文挑战第24天】SQL分组函数
96 1
|
SQL 数据库
【SQL】已解决:SQL分组去重并合并相同数据
【SQL】已解决:SQL分组去重并合并相同数据
225 1
|
11月前
|
SQL 存储 关系型数据库
SQL SERVER 查询所有表 统计每张表的大小
SQL SERVER 查询所有表 统计每张表的大小
110 0