国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接

這篇具有很好參考價(jià)值的文章主要介紹了【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

最近在做的某個(gè)項(xiàng)目中有一些數(shù)據(jù)預(yù)處理的工作,用的是Oracle數(shù)據(jù)庫(kù),涉及到表的拼接操作,在此記錄一下并對(duì)數(shù)據(jù)庫(kù)表的拼接知識(shí)做個(gè)擴(kuò)充。

具體需求是:

  • 把年齡(AGE)、性別(GENDER)、客戶等級(jí)(CUSLEVEL)三個(gè)字段用逗號(hào)隔開拼接成一個(gè)字段
  • 為空的字段不展示,三個(gè)字段全為空則置空

圖中綠色框里的是需要拼接的原始字段;紅色框里的是拼接后的效果。


【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接


這個(gè)需求是表多列之間的橫向拼接,由于Oracle數(shù)據(jù)庫(kù)沒有像Postgre里array這種數(shù)組函數(shù),因此只能使用 concat 函數(shù)或符號(hào) || 來(lái)拼接。


多列橫向拼接

--為實(shí)現(xiàn)這個(gè)需求,先造出上圖演示數(shù)據(jù)
create table test1(
  CUS_NO varchar2(10),
  AGE int,
  GENDER varchar2(10),
  CUSLEVEL varchar2(10)
);
insert into test1(CUS_NO,AGE,GENDER,CUSLEVEL) values('cus_596492',41,'男','黃金級(jí)');commit;
insert into test1(CUS_NO,AGE,GENDER,CUSLEVEL) values('cus_265608',null,'女','鉆石級(jí)');commit;
insert into test1(CUS_NO,AGE,GENDER,CUSLEVEL) values('cus_983740',28,null,'鉑金級(jí)');commit;
insert into test1(CUS_NO,AGE,GENDER,CUSLEVEL) values('cus_356291',30,'男',null);commit;
insert into test1(CUS_NO,AGE,GENDER,CUSLEVEL) values('cus_356291',null,null,null);commit;
--橫向拼接字段
select CUS_NO,AGE,GENDER,CUSLEVEL,
		   --拼接字段末尾逗號(hào)情況的處理
       decode(substr(pinjie,length(pinjie),1),',',substr(pinjie,1,length(pinjie)-1),pinjie) as pinjie
from (--使用拼接符 || 將三個(gè)字段拼接到一起
    select CUS_NO,AGE,GENDER,CUSLEVEL,
           decode(AGE, null, null, '年齡:'||AGE||',') ||
            decode(GENDER, null, null, '性別:'||GENDER||',') ||
            decode(CUSLEVEL, null, null, '客戶等級(jí):'||CUSLEVEL) as pinjie
    from test1
) a
;

多行縱向拼接

字段間的橫向拼接處理起來(lái)比較容易,有時(shí)還會(huì)遇到多行數(shù)據(jù)的縱向拼接,比如下圖是客戶信用卡交易數(shù)據(jù)。如果我們想統(tǒng)計(jì)每個(gè)客戶都在哪些月份發(fā)生了交易,即每個(gè)客戶一條,月份間以逗號(hào)隔開,得到下表這樣。

CUS_NO TRAN_MONTH
cus_101028 201910,201912,202003

【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接


為在Oracle中實(shí)現(xiàn)這種縱向按分隔符的分組拼接,可以使用Oracle的 LISTAGG 函數(shù)。

LISTAGG函數(shù)語(yǔ)法:
LISTAGG (measure_expr:any [, delimiter_expr:VARCHAR]) WITHIN GROUP(ORDER BY column_expr)

LISTAGG函數(shù)一般配合GROUP BY作為聚合函數(shù)(也可用于開窗函數(shù))使用,可以傳入兩個(gè)參數(shù)變量

  • measure_expr:要合并處理的字段

  • delimiter_expr:給定分隔符號(hào)

  • column_expr:排序字段

--為實(shí)現(xiàn)這個(gè)需求,先造出上圖演示數(shù)據(jù)
create table test2(
  CUS_NO varchar2(10),
  YEAR_MONTH varchar2(6),
  TRAN_AMT numeric(20,2)
);
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_101028','201910',880.00);commit;
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_101028','201912',2542.00);commit;
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_101028','202003',535.66);commit;
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_101133','202005',3150.00);commit;
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_101133','202008',19200.00);commit;
insert into test2(CUS_NO,YEAR_MONTH,TRAN_AMT) values('cus_162656','202006',8100.00);commit;

--縱向拼接字段--聚合函數(shù)用法
select CUS_NO
      ,LISTAGG(YEAR_MONTH,',') WITHIN GROUP(ORDER BY YEAR_MONTH) AS PINJIE
from test2
group by CUS_NO;

拼接效果如下,這里可以思考下,如果一個(gè)客戶某個(gè)交易月份有重復(fù)值,該如何得到?jīng)]有重復(fù)月份值的拼接結(jié)果?


【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接


--縱向拼接字段--開窗函數(shù)用法
--聚合和開窗的區(qū)別在于:聚合函數(shù)每組只會(huì)返回一條數(shù)據(jù)(按group by的字段),但開窗函數(shù)會(huì)返回原數(shù)據(jù)所有行,但會(huì)額外增加統(tǒng)計(jì)字段
select CUS_NO,YEAR_MONTH
	     --按客戶編號(hào)開窗
      ,LISTAGG(YEAR_MONTH,',') WITHIN GROUP(ORDER BY YEAR_MONTH) OVER(PARTITION BY CUS_NO) AS PINJIE
from test2;

拼接效果如下,開窗得到的結(jié)果可以和聚合結(jié)果以及原始數(shù)據(jù)作比較


【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-415650.html

到了這里,關(guān)于【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 按分隔符分割字符串(DB2/mysql/hive/Oracle)

    按分隔符分割字符串(DB2/mysql/hive/Oracle)

    1、DB2 --substr+locate/instr DB2沒有自己按分隔符分割字符串的函數(shù),只能結(jié)合使用 或者在DB2里還可以自己寫一個(gè)split分割字符串的函數(shù) 附:instr函數(shù)用法--用來(lái)查找指定字符在字符串中出現(xiàn)的位置 DB2中的locate 函數(shù)可實(shí)現(xiàn)同樣的功能,用法同 instr ,只是源字符串和目標(biāo)字符串的位

    2024年02月13日
    瀏覽(29)
  • matlab如何讀取矩陣的某行某列,多行多列,指定行指定列

    設(shè)有矩陣 a = ? ? ?1 ? ? 2 ? ? 3 ? ? ?4 ? ? 5 ? ? 6 ? ? ?7 ? ? 8 ? ? 9 1:讀取所有行所有列--直接鍵入 a或a(:,:) 2:? 讀取前 i 行,前 j 列。鍵入a( 1:i,? 1:j)? ? 其中 括號(hào)內(nèi),行列以逗號(hào)隔開,逗號(hào)前的控制行,逗號(hào)后的控制列 比如說(shuō)讀取矩陣a的前兩行兩列,鍵入a(1:2,1:2),于

    2023年04月08日
    瀏覽(93)
  • mysql數(shù)據(jù)庫(kù)使用sql對(duì)特殊分隔符分隔的字段進(jìn)行統(tǒng)計(jì)

    mysql數(shù)據(jù)庫(kù)使用sql對(duì)特殊分隔符分隔的字段進(jìn)行統(tǒng)計(jì)

    需求 在一個(gè)數(shù)據(jù)庫(kù)表中有一個(gè)字段中的數(shù)據(jù)是通過(guò)特殊符號(hào)進(jìn)行分隔的,現(xiàn)需要統(tǒng)計(jì)分隔符分開的各數(shù)據(jù)的條數(shù)。 數(shù)據(jù)準(zhǔn)備 ?現(xiàn)需統(tǒng)計(jì)各個(gè)絕技的人數(shù)? 思路 使用sql根據(jù)逗號(hào)將一行數(shù)據(jù)拆分成多行數(shù)據(jù) ,然后使用group by對(duì)拆分的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)。 三種方式,相同的原理 使用

    2023年04月17日
    瀏覽(44)
  • 在 Excel 中將列數(shù)據(jù)用單引號(hào)括起來(lái)并添加分隔符的解決方案

    ????????在 Excel 中,有時(shí)候我們需要將某一列的所有值連接在一起,并且每個(gè)值用單引號(hào)括起來(lái),同時(shí)在每個(gè)值之間添加逗號(hào)和空格。這樣的需求在數(shù)據(jù)處理和導(dǎo)出時(shí)比較常見。本文將介紹一種使用 Excel 函數(shù)解決這個(gè)問(wèn)題的方法。 解決方案: 方法一:使用 CONCATENATE 和

    2024年01月20日
    瀏覽(27)
  • 【Hive】分隔符 『 單字節(jié)分隔符 | 多字節(jié)分隔符』

    【Hive】分隔符 『 單字節(jié)分隔符 | 多字節(jié)分隔符』

    在創(chuàng)建表時(shí),可以使用 row format ... 指定分隔符形式。比如: 但是,根據(jù)原始數(shù)據(jù)分隔符的復(fù)雜程度,需要指定不同的分隔形式。比如: 情況一:分隔符為單字節(jié) 分隔符為多字節(jié) 字段中包含了分隔符 方法:使用delimited 加上 delimited ,即使用 row format delimited :用

    2024年02月13日
    瀏覽(25)
  • 行轉(zhuǎn)列--將多行數(shù)據(jù)轉(zhuǎn)成多行多列的Table結(jié)構(gòu)

    行轉(zhuǎn)列--將多行數(shù)據(jù)轉(zhuǎn)成多行多列的Table結(jié)構(gòu)

    21年做的一個(gè)功能,涉及到將行數(shù)據(jù)轉(zhuǎn)化成列數(shù)據(jù)。邊查邊做,一點(diǎn)一點(diǎn)的嘗試著做好。當(dāng)時(shí)感覺有點(diǎn)吃力。完成之后本想記錄,但一直拖延至今。最近再次接手與這個(gè)功能相關(guān)的業(yè)務(wù),整理了之前寫的代碼,趁此機(jī)會(huì)記錄下來(lái)。 界面中是一個(gè)三級(jí)結(jié)構(gòu):L1級(jí)【Test Sample】,

    2024年02月05日
    瀏覽(20)
  • hive 分隔符

    在 Hive 中,分隔符用于指定數(shù)據(jù)文件中字段之間的分隔符。當(dāng)你創(chuàng)建外部表或加載數(shù)據(jù)文件時(shí),你可以指定分隔符,以便 Hive 正確地解析文件中的數(shù)據(jù)。 1. 創(chuàng)建外部表時(shí)指定分隔符: 當(dāng)你創(chuàng)建外部表時(shí),可以使用 ROW FORMAT 子句來(lái)指定數(shù)據(jù)文件中字段的分隔符。例如,如果你

    2024年02月09日
    瀏覽(21)
  • SQL實(shí)現(xiàn)一行數(shù)據(jù)分組后轉(zhuǎn)多行多列

    在統(tǒng)計(jì)一些指標(biāo)時(shí),通常會(huì)有多個(gè)指標(biāo)需要分組進(jìn)行聚合,但是 數(shù)據(jù)源的粒度可能并非是指標(biāo)分組的粒度 。舉個(gè)例子,比如從訪客表中提取訪客的數(shù)據(jù),每行數(shù)據(jù)有每個(gè)平臺(tái)的首次訪問(wèn)時(shí)間;另外要做一個(gè)平臺(tái)統(tǒng)計(jì)表,其中的一個(gè)指標(biāo)統(tǒng)計(jì)的是各個(gè)平臺(tái)近1天、7天、30天的新

    2024年02月14日
    瀏覽(23)
  • word的分隔符和分頁(yè)符

    分隔符和分頁(yè)符在Word中都是用于文本分段的工具,但它們的用途和操作方式有所不同。 分隔符是一個(gè)廣義的概念,包括分頁(yè)符、分節(jié)符和分欄符等。它是一種統(tǒng)稱,可以將一個(gè)完整的文本內(nèi)容分成兩個(gè)或更多的部分。在將表格轉(zhuǎn)換為文本時(shí),分隔符用于標(biāo)識(shí)文字分隔的位置

    2024年02月08日
    瀏覽(26)
  • 力扣2788-按分隔符拆分字符串

    題目鏈接 解題思路: 1 .傳參是一個(gè)字符串?dāng)?shù)組,我們需要對(duì)每一個(gè)字符串處理 2 .解題中e是字符串?dāng)?shù)組中的每一個(gè)字符串 3 .i是每個(gè)字符串的下標(biāo),n為每個(gè)字符串的大小 4 .遍歷整個(gè)字符串 5 .start是要切割的位置

    2024年01月20日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包