Oracle多行數(shù)據(jù)合并為一行數(shù)據(jù)并將列數(shù)據(jù)轉(zhuǎn)為字段名三種方式
實(shí)現(xiàn)查詢(xún)效果
原數(shù)據(jù)
FZ | PROJECT | VALUE |
---|---|---|
1 | 電腦 | $1600 |
1 | 手機(jī) | $12 |
1 | 導(dǎo)管 | $1 |
2 | 電腦 | $2 |
2 | 手機(jī) | $22 |
方式一:MAX()
數(shù)據(jù)效果
FZ | 電腦 | 手機(jī) | 導(dǎo)管 |
---|---|---|---|
1 | $1600 | $12 | $1 |
2 | $2 | $22 |
SQL
根據(jù)FZ字段篩選并分組,MAX支持字符內(nèi)容,SUN()同樣支持,但是只能是數(shù)字類(lèi)型。
SELECT FZ, MAX(CASE WHEN PROJECT = '電腦' THEN VALUE END) 電腦, MAX(CASE WHEN PROJECT = '手機(jī)' THEN VALUE END) 手機(jī), MAX(CASE WHEN PROJECT = '導(dǎo)管' THEN VALUE END) 導(dǎo)管 FROM TABLE01 GROUP BY FZ
此方法沒(méi)有數(shù)據(jù)庫(kù)類(lèi)型限制,MySQL、Oracle、達(dá)夢(mèng)均可。
方式二:LISTAGG()
數(shù)據(jù)效果
FZ | PROJECT |
---|---|
1 | 電腦,手機(jī),導(dǎo)管 |
此方法僅僅是合并列內(nèi)容,便于整合。
SELECT FZ,LISTAGG(PROJECT,',') PROJECT FROM TABLE01 WHERE FZ = 1;
listagg函數(shù)是在oracle11g后新增的,是一個(gè)實(shí)現(xiàn)字符串聚合的內(nèi)建函數(shù)。也可以實(shí)現(xiàn)行轉(zhuǎn)列的功能,將某個(gè)字段的多行數(shù)據(jù)合并成一條。
用法說(shuō)明:
- LISTAGG('需要拼接的數(shù)據(jù)表中的字段','分隔符') WITHIN GROUP( ORDER BY '同前面,需要拼接的數(shù)據(jù)表中的字段')
- 用法類(lèi)似聚合函數(shù),通過(guò)Group by語(yǔ)句,把每個(gè)Group的一個(gè)字段,拼接起來(lái)。
方式三:WM_CONCAT()
數(shù)據(jù)效果
FZ | PROJECT |
---|---|
1 | 電腦,手機(jī),導(dǎo)管 |
2 | 電腦,手機(jī) |
此方法與方法二相關(guān)相同,但適合于Oracle數(shù)據(jù)庫(kù)。
SELECT FZ,WM_CONCAT(PROJECT,',') PROJECT FROM TABLE01 --WHERE FZ = 1 GROUP BY FZ;
總結(jié)
到此這篇關(guān)于Oracle多行數(shù)據(jù)合并為一行數(shù)據(jù)并將列數(shù)據(jù)轉(zhuǎn)為字段名的文章就介紹到這了,更多相關(guān)Oracle多行數(shù)據(jù)合并一行數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
oracle 使用sql獲取數(shù)據(jù)庫(kù)表、表的字段的多種方法
使用sql獲取數(shù)據(jù)庫(kù)表,表的字段的方法有很多,本文整理了幾個(gè)常用且實(shí)用的方法,需要的朋友可以參考下2013-11-11Oracle臨時(shí)表空間刪除和重建實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Oracle臨時(shí)表空間刪除和重建實(shí)現(xiàn)過(guò)程,臨時(shí)表空間是NOLOGGING模式以及它不保存永久類(lèi)型對(duì)象,因此即使數(shù)據(jù)庫(kù)損毀,做Recovery也不需要恢復(fù)Temporary?Tablespace。下文更多詳細(xì)內(nèi)容介紹需要的小伙伴可以參考一下2022-03-03Oracle 實(shí)現(xiàn)將查詢(xún)結(jié)果保存到文本txt中
這篇文章主要介紹了Oracle 實(shí)現(xiàn)將查詢(xún)結(jié)果保存到文本txt中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Oracle中的高效SQL編寫(xiě)PARALLEL解析
這篇文章主要介紹了Oracle中的高效SQL編寫(xiě)PARALLEL解析,在Oracle中,PARALLEL(并行)方式最大化調(diào)用計(jì)算機(jī)資源來(lái)成倍提高數(shù)據(jù)分析效率,這個(gè)在Oracle 9i之后的版本可以使用,需要的朋友可以參考下2023-07-07Oracle數(shù)據(jù)庫(kù)聚合函數(shù)XMLAGG詳解(全網(wǎng)最全)
在SQL中,合函數(shù)用于對(duì)一組值進(jìn)行計(jì)算并返回單一的值,這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)聚合函數(shù)XMLAGG的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06深入Oracle的left join中on和where的區(qū)別詳解
本篇文章是對(duì)Oracle的left join中on和where的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Oracle數(shù)據(jù)庫(kù)中 call 和 exec的區(qū)別
在sqlplus中這兩種方法都可以使用: exec pro_name(參數(shù)1..); call pro_name(參數(shù)1..); 但是這兩者有什么區(qū)別呢?今天小編給大家介紹下oracle數(shù)據(jù)庫(kù)中 call 和 exec的區(qū)別,感興趣的朋友一起看看吧2016-09-09Oracle使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn)的實(shí)例代碼
dbLink是簡(jiǎn)稱(chēng),全稱(chēng)是databaselink,database link是定義一個(gè)數(shù)據(jù)庫(kù)到另一個(gè)數(shù)據(jù)庫(kù)的路徑的對(duì)象,database link允許你查詢(xún)遠(yuǎn)程表及執(zhí)行遠(yuǎn)程程序,本文給大家介紹了Oracle如何使用dblink實(shí)現(xiàn)跨庫(kù)訪問(wèn),需要的朋友可以參考下2024-03-03