SQL Server字串聚合拼接辦法

2022-08-24 09:09:11 字數 1522 閱讀 3839

資料範例如下:

要得到的結果目標,獲取type相同的所有names拼接在一起的字串:

sqlserver並沒有乙個直接拼接字串的函式,下面所提到的方法,只是日常的開發中自己個人用到的一些思路,僅供參考!

declare

@temptable

table([

type

]int,[

name

]nvarchar(100))

建立表變數,欄位為你需要返回的各列的值

insert

@temptable

select

[type

],max([

name

]) name

from

test

groupby[

type

]

插入初始的聚合資料

updatetag:

update

@temptable

set[

name

]+= (','

+ a.[

name])

from test a,@temptable

bwhere a.[

type

]= b.[

type

]and

charindex(a.[

name

],b.[

name

]) =0if

@@rowcount

>

0begin

goto

updatetag

endselect

*from

@temptable

迴圈插入其他滿足條件的聚合資料,這種方案適合包含聚合條件比較複雜的情況,比如需要查詢聚合多列拼接字串結果,其中還涉及到一些列的複雜運算,但是劣勢也很明顯,如果分組聚合的項比較多時,會比較耗時,因為有乙個迴圈效率不是很高的insert,但是對於幾十或者幾百次的迴圈來說還是沒太大的問題的。

其實網上搜了一圈還是有不錯的方法的,比如stuff函式,我們可以這麼寫得到上面的結果:

select

[type

], stuff((

select',

'+[name

]from

test b

where b.type =

a.type

for xml path('')),1 ,1, '') [

names

]from

test a

groupby[

type

]

至於這個函式用法,這裡就不多解釋了,希望以上兩種方案對您有一點幫助或者啟示!

SQL Server字串聚合拼接辦法

網上搜了一圈還是有不錯的方法的,比如stuff函式,我們可以這麼寫得到上面的結果 select type stuff select name fromtest b where b.type a.type for xml path 1 1,names fromtest a group by type ...

SQLServer字串聚合解決方法(CLR)

meteo ll 關注 寫個綜合檢視,遇到個情況,需要對字串進行聚合統計,簡化如下 任務號提交人 完工數周轉車號 x01張三 300v001 x01李四 200v002 x02王五 600v003 x02馬六 400v004 x02趙七 100v005 目的是 需要列出統計任務的完成資訊如下 任務號...

貪心 字串 拼數

原題鏈結 不知道這是第幾次做這類題了 對於兩個數a和b,我們考慮微調 若a放在前面,則數字為 a b 這裡的 號表示將b連在a後面 若b放在前面,則數字為 b a 則只需比較a b與b a的大小關係即可 即可以判斷哪個數一定放在前面問題來了,怎樣實現呢,兩兩對比?我們發現string 剛好滿足我們需...