表結構 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>