SQL一列多行字串分組合併

2022-05-02 02:30:07 字數 1523 閱讀 9524

最近工作遇到如下資料:需要合併後只剩下兩行的資料,普通的group by 是不能實現的。(如圖)

利用如下sql**,即可實現需求(如圖):

利用 stuff 函式實現分拆合併操作

select teachername,trainingcentername=

stuff

( (

select',

'+trainingcentername

from

@tmp a where a.teachername=b.teachername for xml path('')),1,1,''

)

from

@tmpb

group

by teachername

結果如下:                       

注意:以上寫法只限sql server2005及以上版本執行。

**: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 資料型別,則返回二進位制資料。

備註如果開始位置或長度值是負數,或者如果開始位置大於第乙個字串的長度,將返回空字串。如果要刪除的長度大於第乙個字串的長度,將刪除到第乙個字串中的第乙個字元。

如果結果值大於返回型別支援的最大值,則產生錯誤。

示例以下示例在第乙個字串abcdef 中刪除從第2 個位置(字元b)開始的三個字元,然後在刪除的起始位置插入第二個字串,從而建立並返回乙個字串。

select stuff('abcdef', 2, 3, 'ijklmn'); go

下面是結果集:

--------- aijklmnef

(1 row(s) affected)

**:

sql多行轉為一列的合併

一 資料庫sql server列值鏈式合併 需求 原始表的資料的結構如圖1所示,把相同guid的code值生成乙個鏈式字串。圖1 目標 我們希望達到的效果如圖2所示,這裡的guid變成唯一的了,這行的記錄中包含了這個guid所對應的code字段值的鏈式字串。圖2 分析與實現 要實現圖1到圖2的轉變,...

一列多行合併一列一行

方法1 定義臨時的varchar變數,通過游標一條條讀取,然後在迴圈中改變臨時變數的值最終輸出 關於游標的方法,這裡再敘述。sql2008中的方法 create table tb id int,value varchar 10 insert into tb values 1,aa insert in...

sql多行轉為一列的合併問題

描述 將如下形式的資料按id欄位合併value欄位。id value 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到結果 id value 1 aa,bb 2 aaa,bbb,ccc 即 group by id,求 value 的和 字串相加 1 sql2000中只能用自定義的函式...