Oracle行列間的轉換
更新時(shí)間:2026-05-05 00:14:32
在Oracle數據庫中,行列行列間的轉換轉換是一種常見(jiàn)的操作,它可以幫助我們將行數據轉換為列數據,行列或者將列數據轉換為行數據,轉換這種操作在數據分析、行列報告生成等場(chǎng)景中非常有用,轉換本文將詳細介紹如何在Oracle中使用PL/??SQL語(yǔ)言進(jìn)行行列間的行列轉換。
(圖片來(lái)源網(wǎng)絡(luò ),轉換侵刪)行轉(zhuan)列(ROWS TO COLUMNSヽ(′▽?zhuān)?ノ)
行轉列是行列指將多行數據合并為一行數據(ju)的操作,在Oracle中,轉換我們可以使用L(′_ゝ`)ISTAGG函數和GROUP BY子句實(shí)現行轉列。行列
1、轉換使用LISTAGG函數實(shí)現行轉列
LISTAGG函數用于將多個(gè)行數據合并為一個(gè)字符串,行列其語(yǔ)法如下:
LISTAGG((′▽?zhuān)?column,轉換 delimiter) WITHIN GROUP (ORDER BY co( ?ω?)lumn)column是要合并的列名,delimiter是行列(lie)分隔符,(′;д;`)ORDER BY column表示按照哪一列排序。
示例:
假設我們有一個(gè)銷(xiāo)售表(sales_table),包含以下數據:
| id | product | sales |
| 1 | A | 100 |
| 2 | B | 200 |
| 3 | A | 300 |
| 4 | C | 400 |
| 5 | B | 500 |
我們想要將產(chǎn)品名稱(chēng)和銷(xiāo)售額合并為一行數據,可以使用以下(xia)SQL語(yǔ)???句:
SELECT product, LISTAGG(sales, ', ') WITHIN GROUP (ORDER BY sales) AS sales_summaryFROM sales_tableGROUP BY product;
執行結果:
product | sales_summary |
| A | 100, 300 |
| B | 200, 500 |
| C | 400 |
2、使(shi)用CASE語(yǔ)句實(shí)現行轉列
除了使用LISTAGG函數外,我們還(?⊿?)可以使用CASE語(yǔ)句實(shí)現行轉列,這種方法適用于數據量較小的情況。
示例:
假設我們有一個(gè)??學(xué)生表(student_t(?Д?)able),包含以下數據:
id | name | score | grade |
| 1 | Tom | 80 | A |
| 2 | Bob | 90 | B |
| 3 | Alice | 85 | A |
| 4 | Jerry | 75 | C |
| 5 | Mary | 95 | B |
我們想要將姓名、成績(jì)和等級合并為一行數據,可以使用以下SQL語(yǔ)句:
SELECT name, CASE grade WHEN 'A' THEN score || ', A' WHEN 'B' THEN score || ', B' WHE??N 'C' THEN score || ', C' END AS resultFROM student_table;
執行結果:
| name | re??sult |
| Tom | 80, A |
| Bob | 90, B |
| Aliヾ(′ω`)?ce | 85, A |
Jerry | 75, C |
| Mary | 95, B |
列轉行(COLUMNS TO ROWS)
列轉行是指將一列數據拆分為多行(′?_?`)數據的操作,在Oracle中,我們可以使用UNPIVOT操作實(shí)現列轉行,需要注意的是,Oracle并沒(méi)有直接提供UNPIVOT操作,我們需要使用其他方法實(shí)現,下面介紹兩種實(shí)現ヾ(′▽?zhuān)??(xian)列轉行的方法。
1、使用自連接實(shí)現列轉行
假設我們有一個(gè)員工表(emplo??yee_table),包含以下數據:
| id | department_id | department_name | employee_id | employee_name | salary | bonu(╬?益?)s | commission_rate | commis(′ω`)sion_amount | total_salary | total_commission_amount | total_income | income_type | report_date | report_month | report_year | report_qヾ(′?`)?uarter | report_(?????)weekday | report_weekend | report_holiday | repor(⊙_⊙)t_workingd??ays | report_workhours | report_overtimehours | report_vacationhours | re??port_t??raininghours | report_otherhours | report_remarks | rep(??ヮ?)?*:???ort_??status | repo(′_ゝ`)rt_creator | report_modifier | report_createdate | report_modifieda(?⊿?)te | report_auditdate | report_auditor | report_apヽ(′▽?zhuān)?ノprover | report_approvaldate | report_approvalremarks | report_approvedbydepartmenthead | reporヾ(′?`)?t_approvedbymanagersgroupleadersteamleaderstechnicianssupervisorstrainershrdepartmentofficersothers | report_approv(′▽?zhuān)?)edbycompanyd??irectorgeneralmanagerceochiefoperatingoffice┐(′ー`)┌rcfocounselothers | report_approvedbypersonnelmanagerhumanresourcesmanagerothers | report_approvedbyfinancemanageraccountanto(′ω`)thers | report_appr??ovedbyoperationmanagerproductionmanagerothers | report_approvedbymarketingmanagersalesmanagerothers | repor(?????)t_approvedbyinformationmanagerdataanalystothers | report_approvedbysecurit??ymanagerothers | re??port_approvedbyresear??chanddevelopmentmanagerengineeringmanagerothers | report_approvedbyqualitymanagerothers | report_approvedbycustomerservicemanag???erothers | report_approvedbylogisticsmanager??supplychainmanagerothers | report_appro?vedbylegaladviserothers | report_approvedbypublicrelationsmanagerothers | report_approvedbyenvironmentalprotectionmanagerothers | report_approvedbyhealthandsafetymanagerothers | report_approvedbyoccupationalhealthandsaf(′?_?`)etymanagerothers | report_approvedbye(╯‵□′)╯thicsandcompliancemanage??rothers | report_approvedby(′?`*)riskmanagementmanagerothers | report_approvedbyfinancialcontrollertreasurerothers | report_a??pprovedbyinternalauditorothers | report_approvedbytaxmanagerothers?? | report_approve??dbycomp??liancemanagerothers | report_approvedb??ycorporatesocialresponsibilitym??anagerothers | report_approvedbygovernmen??taff??airsmanagerothers ++??++++++++++??++++++++++++++++++++++++++++++++++++++++++++++++++++reportiˉ\_(ツ)_/ˉngreヾ(′ω`)?portingreportiヽ(′?`)ノngreportingreportingreportingreportingreportingrepor(′?`)tin??greportingreportingreportingreportingreportingreportingreportingreportingreportingreportingr??eportingreporting??reportingreportingreportingreporting=====================================??===========================++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=================================================================??==================================================================++++|| id || department_id || department_name || employee_i(╯°□°)╯︵ ┻━┻d || empl??oyee_name || salary || bonus || co??mmission_rate || commission_

