SQL合并多行查询到一行

示例表 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    

结果与第三种一样。

时间: 2024-08-26 08:57:53

SQL合并多行查询到一行的相关文章

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

示例表 tb 数据如下 id value—————1 aa1 bb2 aaa2 bbb2 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]=( S

Oracle 合并多行记录为一行

1.实际需求情况如下:    描述:上述表中,某一位同学有多门课程和成绩,现在希望有一条SQL语句,将课程名称和成绩合并在一起显示,如下: 描述:将这位同学的全部课程和成绩用一个字段表示,里面包括全部的课程名称和考试成绩 2.问题分析 解决这个问题可以采用创建function的办法,去合并这2个字段,但这样太麻烦,由于是采用的Oracle10g,故可以采用函数wmsys.wm_concat()实现此功能. 3.解决方案 SQL: 第一步先写一个视图view_ly_sjdxpt_jwcj,合并这2

T-SQL 合并多行数据显示到一行

思路: 自连接,使用For XML Path('')和STUFF函数 SELECT * FROM STUDENT Name                      Team------------------------- -------------------------Jack                      Team1Rose                      Team1Cindy                     Team1Richard            

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

示例表 tb 数据如下 id value-----1 aa1 bb2 aaa2 bbb2 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 [v

SQL: 从一个表随机读取一行或几行记录的问题

比如ms sql 2000,随机读取了一行记录: SELECT TOP 1 * FROM [tablename] ORDER BY NEWID() 遇到的问题是,如果这个表记录不多,比如几十或几百.几千行记录,基本上不用1秒时间就出来了. 但我今天需要从一个几十万行记录的表中随机读取一条记录,读取一次需要3 - 5秒. 这效率有点接受不了. 到网上也搜索了一下,有没有更好的办法,没找到好的办法. 关于这个问题的讨论,CSDN: http://topic.csdn.net/u/20100517/1

SQL编程之高级查询(子查询)以及注意事项

1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命令的WHERE子句中.子查询是一个 SELECT 语句,它嵌套在一个 SELECT.SELECT...INTO 语句.INSERT...INTO 语句.DELETE 语句.或 UPDATE 语句或嵌套在另一子查询中. 语法:select ....from  表1  where  列1  > (子查询) 外面的查询成为父查询,圆括号嵌入的查询成为称

SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种) .

SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种) 标签: sql server优化数据库服务器 2014-12-31 10:13 11988人阅读 评论(0) 收藏 举报 本文章已收录于: 今天看到一位博友的文章,觉得不错,转载一下,希望对大家有帮助,更多文章,请访问:http://blog.haoitsoft.com 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. 4.内存

SQL编程之高级查询及注意事项

1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询.子查 询可以使用几个简单命令构造功能强大的复合命令.子查询最常用于SELECT-SQL命令的 WHERE子句中.子查询是一个 SELECT 语句,它嵌套在一个 SELECT.SELECT...INTO 语句.INSERT...INTO 语句.DELETE 语句.或 UPDATE 语句或嵌套在另一子查询中. 语法:select ....from 表1 where 列1 > (子查询) 外面的查询成为父查询,圆括号嵌入的查询成为称为子

SQL SERVER之数据查询

 本篇主要讲解查询语句,所有的示例都会按照下面这张表进行. stuID stuName age sex 11090241031 王小虎 21 男 11090241032 王小六 22 男 11090241033 张三 23 男 1.使用where子句查询表中满足条件的记录 比较查询 算术比较查询 算术比较中常用的就是所谓的>.<.<>.=.!<(不小于).!=(不等于)等,比较的语法如下 select* from T_student where age!>30 se