SQL多行值合并一行字符串逗號(hào)分隔
問題:
假設(shè)我們有一張學(xué)生表:姓名,科目,成績。
在查詢的SQL使用中我們可能會(huì)有這樣一種需求:展示學(xué)生姓名和科目成績,科目成績用逗號(hào)分隔。
實(shí)際上也就是將這個(gè)學(xué)生的所有成績記錄轉(zhuǎn)換為一條記錄展示出來。
就可以使用這個(gè)SQL:
SELECT 姓名, LISTAGG(成績, ',') WITHIN GROUP (ORDER BY 科目) AS 科目成績 FROM 學(xué)生表 GROUP BY 姓名;
這個(gè)查詢首先選擇了 “姓名” 字段,然后使用 LISTAGG
函數(shù)將相同學(xué)生的 “成績” 字段值以逗號(hào)分隔的形式合并成一個(gè)字符串,并按照 “科目” 字段的順序進(jìn)行排序。
LISTAGG
LISTAGG
是一個(gè)用于聚合操作的字符串函數(shù),它在Oracle數(shù)據(jù)庫系統(tǒng)中可用,當(dāng)然達(dá)夢(mèng)也可以。該函數(shù)用于將多個(gè)行中的值連接為一個(gè)字符串,并且可以指定分隔符來分隔每個(gè)值。
通常語法如下:
LISTAGG(expression, delimiter) WITHIN GROUP (ORDER BY column)
expression
是要連接的列或表達(dá)式。delimiter
是用于分隔每個(gè)值的字符串。WITHIN GROUP
子句用于指定對(duì)結(jié)果進(jìn)行排序的列??梢赃x擇省略此子句。ORDER BY
子句用于指定排序的順序。
LISTAGG 函數(shù)將具有相同分組鍵的行的值連接起來,并使用指定的分隔符將它們分隔開。這非常適用于將多個(gè)值合并為一個(gè)字符串,常用于生成逗號(hào)分隔的列表。
實(shí)例:
如圖我們看到這個(gè)查詢結(jié)果中parti_name字段有多個(gè)數(shù)據(jù),現(xiàn)在我們把它轉(zhuǎn)換為一條記錄查詢出來且用逗號(hào)隔開。
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ù)庫中的特定函數(shù),用于將多個(gè)行的值進(jìn)行連接。因此,
LISTAGG
函數(shù)可以在 Oracle 數(shù)據(jù)庫中使用,并且從 Oracle 11g 版本開始可用。
在其他數(shù)據(jù)庫系統(tǒng)中,可能會(huì)有類似的函數(shù)用于字符串聚合操作,但具體的函數(shù)名稱、語法和用法可能會(huì)有所不同。如下是一些其他數(shù)據(jù)庫系統(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)文章
mssqlserver恢復(fù)ldf文件數(shù)據(jù)的方法
本文介紹mssqlserver怎么恢復(fù)ldf文件數(shù)據(jù)庫,簡(jiǎn)單的來說,MDF文件是SQL server用來存放數(shù)據(jù)的數(shù)據(jù)庫文件;LDF文件SQL server是日志文件,存放了對(duì)數(shù)據(jù)庫進(jìn)行的所有操作信息2013-11-11安裝SQL2008時(shí)提示刪除SQL2005Express工具的解決方法
在安裝SQL2008的時(shí)候,提示要?jiǎng)h除SQL2005EXPRESS工具,在網(wǎng)上找了很多資料,終于找到一個(gè)比較方便的方法了,希望能幫助大家。2010-07-07安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法
這篇文章主要介紹了安裝sql server2008后再安裝sql 2005找不到本地服務(wù)器的解決方法,需要的朋友可以參考下2015-01-01SQL2000個(gè)人版 應(yīng)用程序正常初始化失敗0乘以C0000135失敗
應(yīng)用程序正常初始化(0*c0000135)失敗。是什么意思?2011-01-01SQL數(shù)據(jù)庫的高級(jí)sql注入的一些知識(shí)
這篇文章討論常用的"sql注入"技術(shù)的細(xì)節(jié),應(yīng)用于流行的Ms IIS/ASP/SQL-Server平臺(tái)。這里探討有關(guān)這種攻擊各種可以注入程序訪問數(shù)據(jù)和數(shù)據(jù)庫防范的方法。2010-03-03SQL Server 不存在或訪問被拒絕(轉(zhuǎn))
在使用 SQL Server 的過程中,用戶遇到最多的問題莫過于連接失敗了。一般而言,有兩種連接SQL Server 的方式,一是利用 SQL Server 自帶的客戶端工具2009-06-06SqlServer 基礎(chǔ)知識(shí) 數(shù)據(jù)檢索、查詢排序語句
SqlServer 基礎(chǔ)知識(shí) 數(shù)據(jù)檢索、查詢排序語句,需要的朋友可以參考下。2011-10-10必須會(huì)的SQL語句(六) 數(shù)據(jù)查詢
這篇文章主要介紹了sqlserver中數(shù)據(jù)查詢方法,需要的朋友可以參考下2015-01-01