根據某一字段值相同合併字串 SQL

2022-03-25 21:28:21 字數 3195 閱讀 3494

做專案的過程中,遇到乙個問題,相同id,不同value的記錄希望合併成一條記錄,value以逗號分隔,從網上搜了搜解決方案,整理如下,備忘。

一、字串合併

表名:test

字段:

id               int

name        nvarchar(50)

字段值:

期望結果:

id               namestr

-----------------------------

1                a,b,c

2                d,e

3                f

sql實現:

1、利用函式解決

-- 建立處理函式

createfunction dbo.f_str(@id int)

returnsvarchar(8000)

asbegin

declare @r varchar(8000)

set @r = ''

select @r = @r + ',' + [name]

from [test]

where [id]=@id

return stuff(@r, 1, 1, '')

endgo

-- 呼叫函式

select[id], [namestr]=dbo.f_str(id)

from[test]

groupby [id]

執行結果:

2、直接用sql解決

select*

from(

select distinct [id]

from [test]

)aselect

[namestr]= stuff(replace(replace(

(select [name] from [test] n

where [id] = a.id

for xml auto

), '', ''), 1, 1, '')

)m執行結果:

看不懂這個sql不要緊,下面有詳細分析

二、詳細分析

1、  stuff

作用:

stuff函式將字串插入另一字串。它在第乙個字串中從開始位置刪

除指定長度的字元;然後將第二個字串插入第乙個字串的開始位置。

語法:

stuff ( character_expression , start , length ,character_expression )

引數:

character_expression

乙個字元資料表示式。character_expression

可以是常量、變數,也可

以是字元列或二進位制資料列。

start

乙個整數值,指定刪除和插入的開始位置。如果start

或length

為負,則返回空字串。如果start

比第乙個character_expression

長,則返

回空字串。start

可以是bigint型別。

length

乙個整數,指定要刪除的字元數。如果length

比第乙個

character_expression

長,則最多刪除到第乙個character_expression

中的最後乙個字元。length可以是bigint型別。

返回型別:

如果character_expression

是受支援的字元資料型別,則返回字元資料。

如果character_expression

是乙個受支援的binary 資料型別,則返回二

進製資料。

注釋:

如果開始位置或長度值是負數,或者如果開始位置大於第乙個字串的長

度,將返回空字串。如果要刪除的長度大於第乙個字串的長度,將刪

除到第乙個字串中的最後乙個字元。如果結果值大於返回型別支援的最

大值,則產生錯誤。

示例:

selectstuff('abcdef', 2, 3, 'ijklmn');

go結果:

selectstuff('abcdef', -2, 3, 'ijklmn');

go結果:

selectstuff('abcdef', 2, 10, 'ijklmn');

go結果:

用示例來區分兩者:

第一張表:

表名:student

欄位名:

字段值:

第二張表:

表名:student_class

欄位名:

字段值:

select*

from[student] a

select [class], [score]

from [student_class]

where student_id = a.id

)b執行結果:

select*

from[student] a

select [class], [score]

from [student_class]

where student_id = a.id

)b執行結果:

3、  forxml auto

將結果轉換為xml結構,例如對於上面2中的student表,執行以下語句

select*

from[student]

forxml auto

執行結果:

根據某一字段值相同合併字串 SQL

根據某一字段值相同合併字串 sql 做專案的過程中,遇到乙個問題,相同id,不同value的記錄希望合併成一條記錄,value以逗號分隔,從網上搜了搜解決方案,整理如下,備忘。一 字串合併 表名 test 字段 id int name nvarchar 50 字段值 期望結果 id namestr ...

php中有關合併某一字段鍵值相同的陣列合併的改進

下面是實現 關於引數的說明 key鍵值相www.cppcns.com同的鍵名 程式設計客棧array代表原陣列 start代表 array 0 key newkey代表相同鍵值相同的鍵名 bukwht functionwww.cppcns.com combine same val array,sta...

arcpy批量更新shp某一字段的值

提取檔名更新到dlbh欄位 encoding utf 8 import csv import arcpy import os shuju r d short2.gdb wenjianjia r d desktop csv.gdb fish r d desktop yw fishnet.shp res...