Sql Server合并多行詢資料到一行:使用自串連、FOR XML PATH('')、STUFF或REPLACE函數

來源:互聯網
上載者:User

標籤:data   用法   exp   資料   字元   rom   指定   cte   插入   

樣本表 tb 資料如下

id value
—————
1 aa
1 bb
2 aaa
2 bbb
2 ccc


SELECT id,
[val] = (
SELECT [value] + ‘,‘
FROM tb AS b
WHERE b.id = a.id FOR XML PATH(‘‘)
)
FROM tb AS a

顯示結果
1 aa,bb,
1 aa,bb,
2 aaa,bbb,ccc,
2 aaa,bbb,ccc,
2 aaa,bbb,ccc,

 

SELECT id,
[val]=( SELECT [value] +‘,‘
FROM tb AS b
WHERE b.id = a.id
FOR XML PATH(‘‘) )
FROM tb AS a
GROUP BY id

顯示結果
1 aa,bb,
2 aaa,bbb,ccc,



SELECT id,
[val]=STUFF( (SELECT ‘,‘+[value]
FROM tb AS b
WHERE b.id = a.id
FOR XML PATH(‘‘)) , 1 , 1 , ‘‘ )
FROM tb AS a
GROUP BY id

顯示結果
1 aa,bb
2 aaa,bbb,ccc


STUFF 函數將字串插入另一字串。它在第一個字串中從開始位置刪除指定長度的字元;然後將第二個字串插入第一個字串的開始位置。
STUFF ( character_expression , start , length ,character_expression_insert )


SELECT id,
[val]= REPLACE( (SELECT [value] AS [data()]
FROM tb AS b
WHERE b.id = a.id
FOR XML PATH(‘‘)) , ‘ ‘, ‘,‘)
FROM tb AS a
GROUP BY id

結果與上面一樣。
解析:[data()] 這裡據說是起到一個類似數組的作用,具體用法還要再查。
如果外圍不用REPLACE函數包住,則返回的結果是 aaa bbb ccc ,每項之間有空格,所以最後用REPLACE函數將所有空格替換成逗號。

 

Sql Server合并多行詢資料到一行:使用自串連、FOR XML PATH('')、STUFF或REPLACE函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.