最近工作遇到如下資料:需要合併後只剩下兩行的資料,普通的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中只能用自定義的函式...