天天看點

【學習筆記】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>