`
calhaha
  • 浏览: 20774 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
最近访客 更多访客>>
社区版块
存档分类
最新评论

合并多行查询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数

XML 
阅读更多

示例表 tb 数据如下

id   value
—————
1    aa
1    bb
2    aaa
2    bbb
2    ccc

 

第一种

SELECT id, 
       [val]=( SELECT [value] +',' 
               FROM tb AS b 
               WHERE b.id = a.id 
               FOR XML PATH('')  ) 
FROM tb AS a  

   第一种显示结果
   1 aa,bb,
   1 aa,bb,
   2 aaa,bbb,ccc,
   2 aaa,bbb,ccc,
   2 aaa,bbb,ccc,

 

 

第二种

SELECT id, 
            [val]=( SELECT [value] +',' 
                    FROM tb AS b 
                    WHERE b.id = a.id 
                    FOR XML PATH('')  ) 
FROM tb AS a  
GROUP BY id  

   第二种显示结果  
   1 aa,bb,  
   2 aaa,bbb,ccc, 

 

 

第三种  (用STUFF函数替换掉首端的逗号)

SELECT id, 
       [val]=STUFF( (SELECT ','+[value] 
		             FROM tb AS b 
		             WHERE b.id = a.id 
		             FOR XML PATH('')) , 1 , 1 , '' )
FROM tb AS a  
GROUP BY id  

   第三种显示结果  
   1 aa,bb  
   2 aaa,bbb,ccc


STUFF 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
          STUFF ( character_expression , start , length ,character_expression_insert )

 

 

第四种  (用REPLACE函数将所有空格替换成逗号)

SELECT id, 
       [val]= REPLACE( (SELECT [value] AS [data()]
		                FROM tb AS b 
		                WHERE b.id = a.id 
		                FOR XML PATH('')) , ' ', ',')
FROM tb AS a  
GROUP BY id  

 结果与第三种一样,最为理想。

 

解析:[data()] 这里据说是起到一个类似数组的作用,具体用法还要再查。

如果外围不用REPLACE函数包住,则返回的结果是 aaa bbb ccc ,每项之间有空格,所以最后用REPLACE函数将所有空格替换成逗号。

 

 


1、计算列可以不用包含在聚合函数中而直接显示,如下面语句的val。
2、for xml path('') 应该应用于语句的最后面,继而生成xml。
3、for xml path('root')中的path参数是生成的xml最顶级节点。
4、字段名或是别名将成为xml的子节点,对于没有列名(字段+'')或是没有别名的字段将直接显示。如[value] +','则是用,分隔的数据(aa,bb,)。

分享到:
评论

相关推荐

    xml多行变一行工具xml多行变一行工具

    有时我们可能遇到XML文件以多行格式呈现,这在某些IDE(集成开发环境)中进行快速测试或处理时可能会带来不便,因为多行XML字符串在作为单个单元处理时可能会引发错误,例如Java中的`String`对象可能会因换行符而...

    SQL Server FOR XML PATH 语句的应用

    通过使用`FOR XML PATH`语句,可以将SQL Server中的数据查询结果转换成符合特定结构的XML文档。 #### 基本用法 `FOR XML PATH`的基本语法如下: ```sql SELECT column1, column2, ... FROM table FOR XML PATH('...

    sql 多行合并某一列字符串拼接的示例

    在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...

    Oracle多行记录合并

    在Oracle数据库中,多行记录的合并通常是为了将相同字段的多行数据整合成一行,以便于数据分析或者简化展示。这种操作在报表制作、数据整理等场景中非常常见。本篇文章将详细介绍Oracle中实现多行记录合并的几种方法...

    SQL语句行数据拆成多行及多行数据合并成一行的方法.docx

    ### SQL语句行数据拆成多行及多行数据合并成一行的方法 #### 一、SQL语句对一行(单元格)数据拆分成多行 在处理数据时,有时我们需要将一行数据拆分成多行,这在数据分析和报表制作中非常常见。下面将详细介绍几...

    SQL 合并多行记录的方法总汇

    SQL 合并多行记录的方法总汇 ...合并多行记录是数据库管理中的一项重要操作,我们可以使用自定义函数、`OUTER APPLY` 语句或 XML 语句来实现这种操作,每种方法都有其优缺,选择哪种方法取决于具体的应用场景。

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...

    SQL合并一列

    实现“SQL合并一列”的主要方法有两种:使用`GROUP_CONCAT`函数(MySQL特有)或`STRING_AGG`函数(SQL Server 2017及以上版本),以及使用`FOR XML PATH`来构建字符串。这里我们将重点介绍第二种方法,即利用`FOR ...

    sql里将重复行数据合并为一行数据使用逗号进行分隔

    在SQL中,有时我们需要将具有相同属性的重复行数据合并成一行,并使用特定的分隔符,如逗号,来区分各个值。这种操作在处理报告或者数据分析时非常常见,可以减少数据的冗余,使结果更加简洁。本文将详细讲解如何在...

    SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

    总结来说,SQL Server提供了强大的字符串处理功能,通过`STUFF`、`FOR XML PATH`等函数,我们可以方便地处理重复数据,将其合并为一行,并用逗号分隔。这在处理汇总信息或展示聚合数据时非常有用。在实际工作中,...

    oracle数据库的xml文件数据查询

    ### Oracle数据库中的XML数据查询与处理 在Oracle数据库中,对于存储在数据库中的XML文件进行查询和处理是一项非常实用的功能。这种能力可以帮助我们更高效地管理数据,并且能够灵活地应对那些半结构化数据(例如...

    ACCESS 分组合并

    由于ACCESS 没有oracle的listagg函数,也没有sql server这种 for xml path 这种, 要实现分组合并需要自定义一个函数,理解了 for xml path 这个就很好理解了。

    Sql Server:多行合并成一行,并做分组统计的两个方法

    而FOR XML PATH('')是SQL Server中的一个特性,可以将查询结果转换成单个字符串,这里通过为FOR XML PATH添加一个空的标签来避免生成额外的XML标记,并且使用ROOT('R')为生成的XML指定一个根节点。由于FOR XML PATH...

    sql 输出xml

    首先,我们来看下`FOR XML PATH`函数的使用,这是在SQL Server中用来将查询结果输出为XML格式的一个重要工具。通过指定`PATH`子句,你可以控制输出的XML结构。如果省略`PATH`子句,那么输出的XML将是一个单节点,...

    将xml文件转换成csv格式

    7. **处理嵌套和重复数据**:XML可能包含重复元素或嵌套元素,处理这些情况可能需要创建多行或多列。例如,如果一个XML元素可以有多个子元素,那么在CSV中可能需要为每个子元素创建一行。 8. **注意编码和特殊字符*...

    XML文件数据导入到数据库中

    2. **XML类型的列**:如果你的表有一个XML类型列,可以直接使用`STUFF`和`FOR XML`子句将XML数据转换为行集,然后插入。例如: ```sql INSERT INTO YourTable (YourXMLColumn) VALUES (STUFF((SELECT * FROM ...

Global site tag (gtag.js) - Google Analytics