电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

oracle行轉列與列轉行的幾種方式匯總

瀏覽:182日期:2023-09-22 20:54:42
目錄1、準備數據:REST表2、查詢數據3、行轉列方式1:使用 case when then方式方式2: 使用 decode函數方式3:使用pivot函數4、列轉行5、直接使用unpivot函數 --列轉行總結 1、準備數據:REST表-- 創建表RESTCREATE TABLE REST ( 'ID' NUMBER, 'AMOUNT' NUMBER(19,0), 'MONTH' VARCHAR2(255 BYTE));--執行添加數據語句INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '100', 'Jan');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '100', 'Feb');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '66', 'Mar');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '77', 'Jun');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '88', 'Dec');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('1', '12', 'Aug');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '22', 'Feb');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '33', 'Apr');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '232', 'Jul');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '43', 'Sep');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '544', 'Oct');INSERT INTO 'CERPAWCSADM'.'REST' VALUES ('2', '65', 'Nov');2、查詢數據

3、行轉列方式1:使用 case when then方式

case 條件

when 值1 then 返回值1

when 值2 then 返回值2

..........

else 默認值

end

-- 使用case when 方式SELECTid,sum( CASE month WHEN 'Jan' THEN amount ELSE 0 END ) AS Jan_amount,sum( CASE month WHEN 'Feb' THEN amount ELSE 0 END ) AS Feb_amount,sum( CASE month WHEN 'Mar' THEN amount ELSE 0 END ) AS Mar_amount,sum( CASE month WHEN 'Apr' THEN amount ELSE 0 END ) AS Apr_amount,sum( CASE month WHEN 'May' THEN amount ELSE 0 END ) AS May_amount,sum( CASE month WHEN 'Jun' THEN amount ELSE 0 END ) AS Jun_amount,sum( CASE month WHEN 'Jul' THEN amount ELSE 0 END ) AS Jul_amount,sum( CASE month WHEN 'Aug' THEN amount ELSE 0 END ) AS Aug_amount,sum( CASE month WHEN 'Sep' THEN amount ELSE 0 END ) AS Sep_amount,sum( CASE month WHEN 'Oct' THEN amount ELSE 0 END ) AS Oct_amount,sum( CASE month WHEN 'Nov' THEN amount ELSE 0 END ) AS Nov_amount,sum( CASE month WHEN 'Dec' THEN amount ELSE 0 END ) AS Dec_amount FROMREST GROUP BYid

case when 另一種方式:

case when 條件 = 值1 then 返回值1

case when 條件 = 值1 then 返回值1

else 默認值

end

SELECTid,sum( CASE WHEN month ='Jan' THEN amount ELSE 0 END ) AS Jan_amount,sum( CASE WHEN month = 'Feb' THEN amount ELSE 0 END ) AS Feb_amount,sum( CASE WHEN month = 'Mar' THEN amount ELSE 0 END ) AS Mar_amount,sum( CASE WHEN month = 'Apr' THEN amount ELSE 0 END ) AS Apr_amount,sum( CASE WHEN month = 'May' THEN amount ELSE 0 END ) AS May_amount,sum( CASE WHEN month = 'Jun' THEN amount ELSE 0 END ) AS Jun_amount,sum( CASE WHEN month = 'Jul' THEN amount ELSE 0 END ) AS Jul_amount,sum( CASE WHEN month = 'Aug' THEN amount ELSE 0 END ) AS Aug_amount,sum( CASE WHEN month = 'Sep' THEN amount ELSE 0 END ) AS Sep_amount,sum( CASE WHEN month = 'Oct' THEN amount ELSE 0 END ) AS Oct_amount,sum( CASE WHEN month = 'Nov' THEN amount ELSE 0 END ) AS Nov_amount,sum( CASE WHEN month = 'Dec' THEN amount ELSE 0 END ) AS Dec_amount FROMREST GROUP BYid

結果為:

方式2: 使用 decode函數

decode函數: DECODE(條件, 值1, 返回值1, 值2,返回值2, 值3,返回值3, . . . else 缺省值)

含義:if 條件 = 值1 then 返回值1 elsif 條件 = 值2 then 返回值2 else (缺省值) endif

--使用decode函數SELECTid,sum( decode( month, 'Jan', amount, 0 ) ) Jan_amount,sum( decode( month, 'Feb', amount, 0 ) ) Feb_amount,sum( decode( month, 'Mar', amount, 0 ) ) Mar_amount,sum( decode( month, 'Apr', amount, 0 ) ) Apr_amount,sum( decode( month, 'May', amount, 0 ) ) May_amount,sum( decode( month, 'Jun', amount, 0 ) ) Jun_amount,sum( decode( month, 'Jul', amount, 0 ) ) Jul_amount,sum( decode( month, 'Aug', amount, 0 ) ) Aug_amount,sum( decode( month, 'Sep', amount, 0 ) ) Sep_amount,sum( decode( month, 'Oct', amount, 0 ) ) Oct_amount,sum( decode( month, 'Nov', amount, 0 ) ) Nov_amount,sum( decode( month, 'Dec', amount, 0 ) ) Dec_amount FROMREST GROUP BYid

結果和方式1一樣

方式3:使用pivot函數

pivot(<聚合函數>(要聚合的列)for <要轉換的列> in (要轉換的列值 as 要轉換成的列名))

SELECT* FROM REST pivot (SUM(amount) FOR month IN ('Jan' AS Jan_amount,'Feb' AS Feb_amount,'Mar' AS Mar_amount,'Apr' AS Apr_amount,'May' AS May_amount,'Jun' AS Jun_amount,'Jul' AS Jul_amount,'Aug' AS Aug_amount,'Sep' AS Sep_amount,'Oct' AS Oct_amount,'Nov' AS Nov_amount,'Dec' AS Dec_amount ) );

結果為:這個結果會發現,如果數據為空沒有賦值為0

下面這個方法解決null 轉為0 問題

SELECTNVl(Jan_amount,0) Jan_amount,NVl(Feb_amount,0) Feb_amount,NVl(Mar_amount,0) Mar_amount,NVl(Apr_amount,0) Apr_amount,NVl(May_amount,0) May_amount,NVl(Jun_amount,0) Jun_amount,NVl(Jul_amount,0) Jul_amount,NVl(Aug_amount,0) Aug_amount,NVl(Sep_amount,0) Sep_amount,NVl(Oct_amount,0) Oct_amount,NVl(Nov_amount,0) Nov_amount,NVl(Dec_amount,0) Dec_amountFROM REST pivot (SUM(amount) FOR month IN ('Jan' AS Jan_amount,'Feb' AS Feb_amount,'Mar' AS Mar_amount,'Apr' AS Apr_amount,'May' AS May_amount,'Jun' AS Jun_amount,'Jul' AS Jul_amount,'Aug' AS Aug_amount,'Sep' AS Sep_amount,'Oct' AS Oct_amount,'Nov' AS Nov_amount,'Dec' AS Dec_amount ) );

結果和方式1一樣:

4、列轉行

在上述pivot 方法的原sql語句上再加上unpivot函數,將列再轉為行,在unpivot函數中,amount:表示由列轉換為行后的數據

month:表示由列轉換為行后的列名

select * from RESTpivot (sum(amount) for month in ('Jan' AS Jan_amount,'Feb' AS Feb_amount,'Mar' AS Mar_amount,'Apr' AS Apr_amount,'May' AS May_amount,'Jun' AS Jun_amount,'Jul' AS Jul_amount,'Aug' AS Aug_amount,'Sep' AS Sep_amount,'Oct' AS Oct_amount,'Nov' AS Nov_amount,'Dec' AS Dec_amount ))unpivot ( amount for month in(Jan_amount,Feb_amount,Mar_amount,Apr_amount,May_amount,Jun_amount,Jul_amount,Aug_amount,Sep_amount,Oct_amount,Nov_amount,Dec_amount));

結果為:

5、直接使用unpivot函數 --列轉行

準備數據:TEST表

CREATE TABLE TEST ( 'ID' NUMBER(12,0) NOT NULL, 'JAN' VARCHAR2(255 BYTE), 'FEB' VARCHAR2(255 BYTE), 'MAR' VARCHAR2(255 BYTE), 'APR' VARCHAR2(255 BYTE), 'MAY' VARCHAR2(255 BYTE), 'JUN' VARCHAR2(255 BYTE), 'JUL' VARCHAR2(255 BYTE), 'AUG' VARCHAR2(255 BYTE), 'SEP' VARCHAR2(255 BYTE), 'OCT' VARCHAR2(255 BYTE), 'NOV' VARCHAR2(255 BYTE), 'DEC' VARCHAR2(255 BYTE));-- 插入數據INSERT INTO 'CERPAWCSADM'.'TEST' VALUES ('1', '33', '2', '3', '4', '5', '6', '7', '8', '9', '99', '8', '6');INSERT INTO 'CERPAWCSADM'.'TEST' VALUES ('2', '22', '3', '4', '6', '5', '7', '0', '7', '22', '21', '343', '76');INSERT INTO 'CERPAWCSADM'.'TEST' VALUES ('3', '88', '3', '4', '5', '7', '9', '7', '2', '2', '231', '56', '78');

查詢出的數據

列轉行sql

SELECT* FROM TESTunpivot ( amount for month in(JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC));

結果為:

總結

到此這篇關于oracle行轉列與列轉行的幾種方式匯總的文章就介紹到這了,更多相關oracle行轉列與列轉行內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Oracle 數據庫
主站蜘蛛池模板: 全自动端子机|刺破式端子压接机|全自动双头沾锡机|全自动插胶壳端子机-东莞市傅氏兄弟机械设备有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | LOGO设计_品牌设计_VI设计 - 特创易| 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 同步带轮_同步带_同步轮_iHF合发齿轮厂家-深圳市合发齿轮机械有限公司 | 座椅式升降机_无障碍升降平台_残疾人升降平台-南京明顺机械设备有限公司 | 电动高压冲洗车_价格-江苏速利达机车有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 苏州柯瑞德货架-仓库自动化改造解决方案 | 胃口福饺子加盟官网_新鲜现包饺子云吞加盟 - 【胃口福唯一官网】 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 拉卡拉POS机官网 - 官方直营POS机办理|在线免费领取 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 营养师网,营养师考试时间,报名入口—网站首页 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) |