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

时间:2023-01-15 10:26:47

 

SQL中合并多行记录的方法总汇--  =============================================================================
SQL中合并多行记录的方法总汇--
 Title: 在SQL中分类合并数据行
SQL中合并多行记录的方法总汇--
 Author: dobear        Mail(MSN): dobear_0922@hotmail.com
SQL中合并多行记录的方法总汇--
 Environment: Vista + SQL2005
SQL中合并多行记录的方法总汇--
 Date: 2008-04-22
SQL中合并多行记录的方法总汇--
 =============================================================================
SQL中合并多行记录的方法总汇

SQL中合并多行记录的方法总汇
-- 1. 创建表,添加测试数据
SQL中合并多行记录的方法总汇
CREATE   TABLE  tb(id  int [ value ]   varchar ( 10 ))
SQL中合并多行记录的方法总汇
INSERT  tb  SELECT   1 ' aa '
SQL中合并多行记录的方法总汇
UNION   ALL   SELECT   1 ' bb '
SQL中合并多行记录的方法总汇
UNION   ALL   SELECT   2 ' aaa '
SQL中合并多行记录的方法总汇
UNION   ALL   SELECT   2 ' bbb '
SQL中合并多行记录的方法总汇
UNION   ALL   SELECT   2 ' ccc '
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- SELECT * FROM tb
SQL中合并多行记录的方法总汇SQL中合并多行记录的方法总汇
/**/ /*
SQL中合并多行记录的方法总汇id          value
SQL中合并多行记录的方法总汇----------- ----------
SQL中合并多行记录的方法总汇1           aa
SQL中合并多行记录的方法总汇1           bb
SQL中合并多行记录的方法总汇2           aaa
SQL中合并多行记录的方法总汇2           bbb
SQL中合并多行记录的方法总汇2           ccc
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇(5 row(s) affected)
SQL中合并多行记录的方法总汇
*/

SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- 2 在SQL2000只能用自定义函数实现
SQL中合并多行记录的方法总汇--
--2.1 创建合并函数fn_strSum,根据id合并value值
SQL中合并多行记录的方法总汇
GO
SQL中合并多行记录的方法总汇
CREATE   FUNCTION  dbo.fn_strSum( @id   int )
SQL中合并多行记录的方法总汇
RETURNS   varchar ( 8000 )
SQL中合并多行记录的方法总汇
AS
SQL中合并多行记录的方法总汇
BEGIN
SQL中合并多行记录的方法总汇    
DECLARE   @values   varchar ( 8000 )
SQL中合并多行记录的方法总汇    
SET   @values   =   ''
SQL中合并多行记录的方法总汇    
SELECT   @values   =   @values   +   ' , '   +  value  FROM  tb  WHERE  id = @id
SQL中合并多行记录的方法总汇    
RETURN   STUFF ( @values 1 1 '' )
SQL中合并多行记录的方法总汇
END
SQL中合并多行记录的方法总汇
GO
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
--  调用函数
SQL中合并多行记录的方法总汇
SELECT  id, VALUE  =  dbo.fn_strSum(id)  FROM  tb  GROUP   BY  id
SQL中合并多行记录的方法总汇
DROP   FUNCTION  dbo.fn_strSum
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- --2.2 创建合并函数fn_strSum2,根据id合并value值
SQL中合并多行记录的方法总汇
GO
SQL中合并多行记录的方法总汇
CREATE   FUNCTION  dbo.fn_strSum2( @id   int )
SQL中合并多行记录的方法总汇
RETURNS   varchar ( 8000 )
SQL中合并多行记录的方法总汇
AS
SQL中合并多行记录的方法总汇
BEGIN
SQL中合并多行记录的方法总汇    
DECLARE   @values   varchar ( 8000 )    
SQL中合并多行记录的方法总汇    
SELECT   @values   =   isnull ( @values   +   ' , ' '' +  value  FROM  tb  WHERE  id = @id
SQL中合并多行记录的方法总汇    
RETURN   @values
SQL中合并多行记录的方法总汇
END
SQL中合并多行记录的方法总汇
GO
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
--  调用函数
SQL中合并多行记录的方法总汇
SELECT  id, VALUE  =  dbo.fn_strSum2(id)  FROM  tb  GROUP   BY  id
SQL中合并多行记录的方法总汇
DROP   FUNCTION  dbo.fn_strSum2
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- 3 在SQL2005中的新解法
SQL中合并多行记录的方法总汇--
--3.1 使用OUTER APPLY
SQL中合并多行记录的方法总汇
SELECT   *  
SQL中合并多行记录的方法总汇
FROM  ( SELECT   DISTINCT  id  FROM  tb) A  OUTER  APPLY(
SQL中合并多行记录的方法总汇        
SELECT   [ values ] =   STUFF ( REPLACE ( REPLACE (
SQL中合并多行记录的方法总汇            (
SQL中合并多行记录的方法总汇                
SELECT  value  FROM  tb N
SQL中合并多行记录的方法总汇                
WHERE  id  =  A.id
SQL中合并多行记录的方法总汇                
FOR  XML AUTO
SQL中合并多行记录的方法总汇            ), 
' <N value=" ' ' , ' ),  ' "/> ' '' ),  1 1 '' )
SQL中合并多行记录的方法总汇)N
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- --3.2 使用XML
SQL中合并多行记录的方法总汇
SELECT  id,  [ values ] = STUFF (( SELECT   ' , ' + [ value ]   FROM  tb t  WHERE  id = tb.id  FOR  XML PATH( '' )),  1 1 '' )
SQL中合并多行记录的方法总汇
FROM  tb
SQL中合并多行记录的方法总汇
GROUP   BY  id
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇
-- 4 删除测试表tb
SQL中合并多行记录的方法总汇
drop   table  tb
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇SQL中合并多行记录的方法总汇
/**/ /*
SQL中合并多行记录的方法总汇id          values
SQL中合并多行记录的方法总汇----------- --------------------
SQL中合并多行记录的方法总汇1           aa,bb
SQL中合并多行记录的方法总汇2           aaa,bbb,ccc
SQL中合并多行记录的方法总汇
SQL中合并多行记录的方法总汇(2 row(s) affected)
SQL中合并多行记录的方法总汇
*/

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