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

时间:2022-01-02 10:29:31
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中合并多行记录的方法总汇 .
*/