做專案的過程中,遇到乙個問題,相同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...