天天看点

【学习笔记】SQL语句处理分组合并背景解决方案扩展学习

表结构     id      name     1       罗涛     1       涛帅帅     2       刘亮     2       亮哥     2       亮傻  要得出结果     id         name     1       罗涛,涛帅帅     2       刘亮,亮哥,亮傻 

这是一个典型的分组合并的需求,一般有两种方法,一是写一个函数处理,二是用xml for path方法,代码如下:

 1 --建立测试环境

 2 Create table BWTEST

 3 (

 4     id Int,

 5     name Varchar(10)

 6 )

 7 GO

 8 --插入数据

 9 Insert BWTEST Values(1,'罗涛')    

10 Insert BWTEST Values(1,'涛帅帅')

11 Insert BWTEST Values(2,'刘亮')

12 Insert BWTEST Values(2,'亮哥')

13 Insert BWTEST Values(2,'亮傻')

14 GO

15 

16 --方法一:函数法

17 --创建函数

18 Create Function Getb(@id Int)

19 RETURNS Varchar(8000)

20 AS

21     BEGIN

22         DECLARE @s Varchar(8000)

23         SET @s= ''

24         SELECT @s=@s+','+name FROM BWTEST WHERE id=@id ;

25         RETURN @s

26     END

27 GO

28 

29 --调用

30 Select id, Substring(dbo.Getb(id),2,LEN(dbo.Getb(id))-1) as name from BWTEST Group By id;

31 

32 

33 --方法二:利用XML path法

34 SELECT id,STUFF((SELECT ','+name FROM BWTEST WHERE id=BW.id FOR xml path('')),1,1,'') AS name FROM BWTEST BW GROUP BY id

35 

36 

37 --删除测试环境

38 Drop Function Getb

39 Drop table BWTEST

40 --结果

41 /*

42 id          name

43 ----------- --------

44 1           罗涛,涛帅帅

45 2           刘亮,亮哥,亮傻

46 */ 

<a href="http://www.cnblogs.com/huazai/archive/2009/08/07/1541453.html">利用XML FOR PATH 合并分组信息</a>

<a href="http://www.cnblogs.com/345563452/archive/2009/10/29/1592048.html">sql STUFF用法</a>

<a href="http://www.cnblogs.com/penglink/archive/2009/03/07/1405360.html">SQL截取字符串</a>