create table tb ([id] int,[name] varchar(2)) insert into tb select 1,'aa' union all select 2,'bb' union all select 1,'cc' union all select 3,'dd' union all select 2,'ee' select * from tb --查询 select id, name=stuff((select ','+name from tb where id=t.id for xml path('')),1,1,'') from tb t group by id 方法二: CREATE FUNCTION GET_STRING(@ID INT) RETURNS VARCHAR(50) AS BEGIN DECLARE @NAME VARCHAR(500) SELECT @NAME=ISNULL(@NAME+',','')+NAME FROM TB WHERE ID=@ID RETURN @NAME END SELECT ID ,DBO.GET_STRING(ID)NAME FROM TB GROUP BY ID ----------------------------------------------------------------------- 在oracle中,是有相对应的函数,sys_connect_by_path函数。 先在这里把oracle的函数实现也写下吧 select id ,itrim(max(sys_connect_by_path(name,','))) as name from (select id ,name ,lead(rnFirst) over(partition by no order by rnFirst)rnNext from (select a.id ,a.name ,row_number() over(order by a.id,a.name desc) rnFirst from @t a) tmpTable1 ) tmpTable2 start with rnNext is null connect by rnNext = PRior rnFirst group by id 以上是实现oracle中的行转列方式。 ********************************************下面我们来看一下sqlserver的,因为sqlserver没提供类似的函数,不知道sqlserver2012提供没 不过sqlserver支持起来也很简单,使用cross apply和for xml path组合来用,这两个单独都知道是怎么回事,怎么使用,但是真不知道还有它俩组合来完成这个功能的,感到很是不可思议,这里要感谢下网络上的人,原来自己写东西都是把所学到的知识记录到本机,从不放到网上,也可能是最近吧,好多工作不会,都是通过网络帮助,就把我所知道的东西也都放到网上来,大家一起学习。 sqlserver: select id, SUBSTRING(names, 1, len(names)-1) from @t AS A cross APPLY (SELECT NAME + ',' FROM @t AS B WHERE A.id = B.id FOR XML PATH('')) D (names) GROUP BY id, names
发表评论
-
转:避免全表扫描的sql优化
2015-02-05 16:37 1322http://tech.diannaodian.com/dw/ ... -
给表加上聚集索引和非聚集索引
2014-12-11 17:28 700创建简单非聚集索引 以下示例为 Purchasing.Pro ... -
查看表中索引语句
2014-12-11 10:37 678SELECT object_name(object_id) ... -
SQL2008一行转多行的精典写法
2013-08-28 12:06 415--创建测试表 create table t1( id ... -
在sql server中利用with as实现递归功能
2013-06-25 10:48 532在sqlserver2005之前,要实现递归功能比较麻烦,比如 ... -
SQL 2005 with(nolock)详解
2013-06-17 17:03 583大家在写查询时, ... -
用SQL语句查询每门成绩都大于80的学生姓名
2013-05-29 10:39 1723昨天遇到的一个SQL面试题,感觉很有趣。 表名stu 结构 ... -
SqlServer强制断开数据库已有连接的方法
2013-02-22 11:03 1619在master数据库中执行如下代码 declare @i IN ... -
Sql获取第一天、最后一天
2013-01-03 14:56 9677① 本月第一天(--减去今天再加上1天) SELECT DAT ... -
表函数与游标
2012-12-25 16:07 743--建立数据源 create table tb1(zm ch ... -
sql server 2005 输出表的函數用法
2012-12-25 16:02 835view sourceprint? 01 --sql ser ... -
SQL杂谈
2012-12-14 17:33 7311、如何用convert什么的把带有时分秒的日期转为时分秒都0 ... -
用FOR XML PATH将查询结果以XML输出
2012-09-20 17:54 1039本文从此而来 http://www.cnblogs.com/d ... -
left join on and
2012-09-20 10:23 887数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临 ... -
筛选索引简单使用
2012-08-17 11:29 1154对于在强制实施数据完整性时的一种常见需求,也可以用筛选索引来解 ... -
排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句
2012-08-10 10:36 6629--在部门内新水排名(如果有相同名次,用dense_rank) ... -
SQL SERVER 中行列转换 PIVOT UNPIVO
2012-08-18 15:34 2331PIVOT用于将列值旋转为列名、同时执行聚合运算(即行转列), ... -
Apply简单使用举例
2012-08-09 17:20 1027APPLY APPLY运算符把右表表达式应用左输入中 ... -
SQL Server 2008语句大全完整版
2012-08-09 10:39 1391--======================== ... -
Not Exists练习
2012-07-23 14:40 888IF OBJECT_ID(N'a') IS NOT NU ...
相关推荐
通过使用`FOR XML PATH`语句,可以将SQL Server中的数据查询结果转换成符合特定结构的XML文档。 #### 基本用法 `FOR XML PATH`的基本语法如下: ```sql SELECT column1, column2, ... FROM table FOR XML PATH('...
在SQL Server 2008中,将一列值转换为一个字符串是一个常见的需求,特别是在进行数据汇总或生成报告时。本篇文章将详细介绍如何利用SQL Server 2008中的功能来实现这一需求,并深入探讨背后的原理和技术要点。 ### ...
在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...
在SQL Server中,将某一列的值拼接成字符串是一个常见的需求,这通常涉及到数据的格式化输出,比如创建报告或者导出数据。这个过程可以通过几种不同的方法来实现,其中包括使用FOR XML PATH子句和CONCAT函数。我们将...
SQL Server 2005提供了`FOR XML PATH`方法来连接字符串,这在处理字符串连接时非常有效。例如,可以使用以下语句: ```sql SELECT xh, STUFF((SELECT ',' + value FROM t_table t2 WHERE t1.xh = t2.xh FOR...
在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...
`FOR XML PATH` 是 SQL Server 中用于构造 XML 数据的一个强大工具。通过这个语句,你可以将 SQL 查询结果转换成 XML 格式,便于数据交换、存储或者进一步处理。以下是对 `FOR XML PATH` 语句的详细解释和应用示例。...
在这个查询中,子查询`select cast(name as varchar(2)) + '*' from @test for xml path('')`会为`@test`表中的每个`name`值生成一个带有分隔符的字符串,然后`FOR XML PATH('')`会把这些字符串连接起来,而不会添加...
`FOR XML PATH('')`表示将所有符合条件的结果行转换为单行输出,并且每行之间的分隔符为空,即不使用任何字符进行分隔。 最后,使用`SELECT`语句输出最终结果: ```sql SELECT @stacklist_id_arr ``` #### 详细...
首先,我们来看下`FOR XML PATH`函数的使用,这是在SQL Server中用来将查询结果输出为XML格式的一个重要工具。通过指定`PATH`子句,你可以控制输出的XML结构。如果省略`PATH`子句,那么输出的XML将是一个单节点,...
在SQL Server 2005中,`FOR XML PATH`是专门为字符串聚合设计的,因此它通常比使用用户定义函数更快,特别是在处理大量数据时。 此外,SQL Server 2005还引入了对CLR(公共语言运行库)的支持,允许开发人员使用...
在上面的代码中,我们使用 STRING_AGG 函数来将 `收费类别` 字段的多个记录值合并到一个字符串中,并使用 GROUP BY 子句来分组结果。 SQL Server 提供了多种方法来实现字段值的合并,每种方法都有其优缺点。用户...
实现“SQL合并一列”的主要方法有两种:使用`GROUP_CONCAT`函数(MySQL特有)或`STRING_AGG`函数(SQL Server 2017及以上版本),以及使用`FOR XML PATH`来构建字符串。这里我们将重点介绍第二种方法,即利用`FOR ...
在SQL Server中,`GroupConcat`函数是一种非常实用的功能,特别是在处理聚合数据并希望返回一组字符串,而不是单个值时。然而,与MySQL等其他数据库系统不同,SQL Server原生并不支持`GroupConcat`。因此,为了在SQL...
在实际应用中,我们可以通过设置`FOR XML PATH('')`的方式,将多行数据拼接成一个单一的字符串,而不需要额外的编程逻辑。 #### 二、基本语法结构 `FOR XML PATH`的基本用法如下: ```sql SELECT column1, ...
在这个语句中,`FOR XML PATH('')`的作用是将查询结果组合成一个XML字符串,每行数据会被转换为一个元素。在这里,我们并不关心生成的XML,而是利用其合并效果。`STUFF`函数则用于在字符串中删除指定长度的字符,...
在这个例子中,`FOR XML PATH('')` 指定了 PATH 模式,并且使用了空字符串 `' '` 来指示每个列名作为路径的一部分,而 `ROOT('report')` 则指定了整个 XML 文档的根元素。 #### 小结 通过上述介绍,可以看出 SQL ...
在C#中,使用ADO.NET操作数据库时,你可以通过`SqlConnection`(SQL Server)、`OleDbConnection`(ODBC兼容数据库)或`OdbcConnection`(ODBC)类创建连接对象,并将连接字符串作为构造函数的参数传递。例如: ```...
本文将介绍如何在SQL Server中创建一个自定义函数,将XML变量转换为JSON文本。 首先,让我们详细解析提供的代码段。这是一个名为`fnXmlToJson`的用户定义函数,它接受一个XML类型的参数`@XmlData`并返回一个...