【學習筆記】SQL語句處理分組合并

來源:互聯網
上載者:User
背景

今天在博問上看到一個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 */ 擴充學習

利用XML FOR PATH 合并分組資訊

sql STUFF用法

SQL截取字串

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.