SQL多行值合并一行字符串逗號(hào)分隔
問(wèn)題:
假設(shè)我們有一張學(xué)生表:姓名,科目,成績(jī)。
在查詢的SQL使用中我們可能會(huì)有這樣一種需求:展示學(xué)生姓名和科目成績(jī),科目成績(jī)用逗號(hào)分隔。
實(shí)際上也就是將這個(gè)學(xué)生的所有成績(jī)記錄轉(zhuǎn)換為一條記錄展示出來(lái)。
就可以使用這個(gè)SQL:
SELECT 姓名, LISTAGG(成績(jī), ',') WITHIN GROUP (ORDER BY 科目) AS 科目成績(jī) FROM 學(xué)生表 GROUP BY 姓名;
這個(gè)查詢首先選擇了 “姓名” 字段,然后使用 LISTAGG函數(shù)將相同學(xué)生的 “成績(jī)” 字段值以逗號(hào)分隔的形式合并成一個(gè)字符串,并按照 “科目” 字段的順序進(jìn)行排序。
LISTAGG
LISTAGG 是一個(gè)用于聚合操作的字符串函數(shù),它在Oracle數(shù)據(jù)庫(kù)系統(tǒng)中可用,當(dāng)然達(dá)夢(mèng)也可以。該函數(shù)用于將多個(gè)行中的值連接為一個(gè)字符串,并且可以指定分隔符來(lái)分隔每個(gè)值。
通常語(yǔ)法如下:
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
expression是要連接的列或表達(dá)式。delimiter是用于分隔每個(gè)值的字符串。WITHIN GROUP子句用于指定對(duì)結(jié)果進(jìn)行排序的列??梢赃x擇省略此子句。ORDER BY子句用于指定排序的順序。
LISTAGG 函數(shù)將具有相同分組鍵的行的值連接起來(lái),并使用指定的分隔符將它們分隔開(kāi)。這非常適用于將多個(gè)值合并為一個(gè)字符串,常用于生成逗號(hào)分隔的列表。
實(shí)例:

如圖我們看到這個(gè)查詢結(jié)果中parti_name字段有多個(gè)數(shù)據(jù),現(xiàn)在我們把它轉(zhuǎn)換為一條記錄查詢出來(lái)且用逗號(hào)隔開(kāi)。
SELECT uuid as uuid, LISTAGG(parti_name, ',') WITHIN GROUP ( ORDER BY DISPLAYORDER) AS parti_name FROM PARTICIPA GROUP BY uuid
結(jié)果:

注意:
LISTAGG聚合函數(shù)是 Oracle 數(shù)據(jù)庫(kù)中的特定函數(shù),用于將多個(gè)行的值進(jìn)行連接。因此,
LISTAGG函數(shù)可以在 Oracle 數(shù)據(jù)庫(kù)中使用,并且從 Oracle 11g 版本開(kāi)始可用。
在其他數(shù)據(jù)庫(kù)系統(tǒng)中,可能會(huì)有類似的函數(shù)用于字符串聚合操作,但具體的函數(shù)名稱、語(yǔ)法和用法可能會(huì)有所不同。如下是一些其他數(shù)據(jù)庫(kù)系統(tǒng)中類似 LISTAGG 的函數(shù),有類似需求可百度求解:
- MySQL:
GROUP_CONCAT - SQL Server:
STRING_AGG - PostgreSQL:
STRING_AGG - IBM DB2:
LISTAGG
到此這篇關(guān)于SQL多行值合并一行字符串逗號(hào)分隔的文章就介紹到這了,更多相關(guān)SQL多行值合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SqlServer數(shù)據(jù)庫(kù)創(chuàng)建用戶只賦予某個(gè)視圖權(quán)限
這篇文章主要給大家介紹了關(guān)于SqlServer數(shù)據(jù)庫(kù)創(chuàng)建用戶只賦予某個(gè)視圖權(quán)限的相關(guān)資料,在SQL Server中,要?jiǎng)?chuàng)建用戶并為其授權(quán)表可以通過(guò)以下步驟完成,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
SQL參數(shù)化查詢的另一個(gè)理由 命中執(zhí)行計(jì)劃
為了提高數(shù)據(jù)庫(kù)運(yùn)行的效率,我們需要盡可能的命中執(zhí)行計(jì)劃,這樣就可以節(jié)省運(yùn)行時(shí)間2012-08-08
SQL Server 2016 無(wú)域群集配置 AlwaysON 可用性組圖文教程
這篇文章主要介紹了SQL Server 2016 無(wú)域群集配置 AlwaysON 可用性組圖文教程,需要的朋友可以參考下2017-04-04
SqlServer中模糊查詢對(duì)于特殊字符的處理方法
這篇文章主要介紹了SqlServer中模糊查詢對(duì)于特殊字符的處理方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
在SQL Server啟動(dòng)時(shí)自動(dòng)執(zhí)行存儲(chǔ)過(guò)程。
當(dāng)sql server啟動(dòng)時(shí),我很想運(yùn)行一個(gè)存儲(chǔ)過(guò)程。有沒(méi)有一種方法可以在每次SQL Server服務(wù)啟動(dòng)時(shí)都會(huì)自動(dòng)執(zhí)行這個(gè)存儲(chǔ)過(guò)程呢?2008-10-10
Sqlserver中char,nchar,varchar與Nvarchar的區(qū)別分析
Sqlserver中char,nchar,varchar與Nvarchar的區(qū)別分析,使用sqlserver的朋友可以參考下。2011-08-08
SQLServer導(dǎo)出sql文件/表架構(gòu)和數(shù)據(jù)操作步驟
只導(dǎo)出了數(shù)據(jù)庫(kù)的sql腳本,而表里的數(shù)據(jù)依然沒(méi)有導(dǎo)出來(lái),接下來(lái)將為你解決這個(gè)問(wèn)題,感興趣的看下教程哈2013-03-03

