oracle中關(guān)于case?when?then的使用
關(guān)于case when then的使用
1.首先創(chuàng)建兩個(gè)表emp,emp_bonus如下:
(1)emp_bonus:
>
(2)emp:

2.首先對(duì)emp_bonus表進(jìn)行操作:
select emp_bonus.*,(case when empno=7934 then 0
when empno=7839 then 1 else -1
end) as asd from emp_bonus
效果:

可見(jiàn)case when then 的作用或者效果是根據(jù)條件重新添加了一列!其實(shí)這一列可以的多表關(guān)聯(lián)中進(jìn)行其他有效的操作。
3.如,員工的獎(jiǎng)金根據(jù)emp_bonus中的type來(lái)計(jì)算,type=1則工資的10%作為獎(jiǎng)金,type=2則工資的20%作為獎(jiǎng)金,以此類(lèi)推……現(xiàn)在要求返回10號(hào)部門(mén)的員工工資及獎(jiǎng)金:
select e.deptno,e.deptno,e.ename,e.sal,
(e.sal*case
when eb.type=1 then 0.1
when eb.type=2 then 0.2
when eb.type=3 then 0.3 end) as bonus from emp e inner join emp_bonus eb on(e.empno=eb.empno) and e.deptno=10

可見(jiàn),兩表關(guān)聯(lián)后的bonus列進(jìn)行了操作……
Oracle語(yǔ)句中case when起別名
配合前端框架,前后臺(tái)查出來(lái)的數(shù)據(jù)是經(jīng)常配合的,比如一個(gè)黨員信息列表,針對(duì)性別字段,后臺(tái)查出來(lái)的是0或者1代表男和女,一種方式是前臺(tái)針對(duì)0,1進(jìn)行文字轉(zhuǎn)換,像easyui和layui等都提供相應(yīng)的js寫(xiě)法。
easyui 在datagrid 的columns:數(shù)組里面使用formatter函數(shù)實(shí)現(xiàn)。
{width : '5%',title : '性別',field : 'sex',sortable : true,formatter:function(value,row,index){
switch (value) {
case '1':
return '<font >男</font>';
break;
default:
return '<font >女</font>';
break;
}
}},在layui里可以使用layui模板語(yǔ)法實(shí)現(xiàn)。
window.demoTable = table.render({
elem : '#idTest',
id : 'idTest',
url : '<%=path%>/partyMember/getPartyMembersByOrgCode',
width : 1500,
height : 650,
cols : [ [ //標(biāo)題欄
{checkbox : true,LAY_CHECKED : false,filter : 'test'},
{field : 'PM_CODE',title : '黨員編號(hào)',width : 220,sort : true,align : 'center'},
{field : 'NAME',title : '黨員姓名',width : 120,sort : true,align : 'center'},
{field : 'SEX',title : '性別',width : 80,sort : true,align : 'center',templet:'#sexTpl'},
{field : 'MOBILE_NO',title : '手機(jī)號(hào)碼',width : 220,sort : true,align : 'center'},
{field : 'CODE',title : '組織編碼',width : 220,sort : true,align : 'center'},
{field : 'ORG_NAME',title : '所在支部',width : 200,sort : true,align : 'center'},
{fixed : 'right',title : '操作',width : 200,align : 'center',toolbar : '#barDemo'} ] ],
page : true //是否顯示分頁(yè)
,
limits : [ 15, 20,50, 100 ],
limit : 15
//每頁(yè)默認(rèn)顯示的數(shù)量
});
<script type="text/html" id="sexTpl">
{{# if(d.SEX ==0){ }}
女
{{# } else { }}
男
{{# } }}
</script>第二種方法:直接數(shù)據(jù)庫(kù)里返回文字信息。
在這種情況下遇到了case when 語(yǔ)句別名的問(wèn)題,在此博客記錄下,希望各位也留意。
剛開(kāi)始寫(xiě)的語(yǔ)句
select name,case sex when '0' then '男' else '女' end as '性別' from t_member_base where mobile_tel='13707979894'
報(bào)如下錯(cuò)誤:
ORA-00923: 未找到要求的 FROM 關(guān)鍵字
00923. 00000 - "FROM keyword not found where expected"
*Cause:
*Action:
行 1 列 60 出錯(cuò)
查了相關(guān)資料才知道,oracle case when 取別名是不能帶as的,去掉as即可。

而且性別還不能帶單引號(hào),一般程序里都是取英文,如果是漢子,還不能帶單引號(hào),直接漢子即可,說(shuō)明下。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ORACLE學(xué)習(xí)筆記-添加更新數(shù)據(jù)函數(shù)篇
Oracle系統(tǒng),即是以O(shè)racle關(guān)系數(shù)據(jù)庫(kù)為數(shù)據(jù)存儲(chǔ)和管理作為構(gòu)架基礎(chǔ),構(gòu)建出的數(shù)據(jù)庫(kù)管理系統(tǒng)。世界第一個(gè)支持SQL語(yǔ)言的商業(yè)數(shù)據(jù)庫(kù),定位于高端工作站,以及作為服務(wù)器的小型計(jì)算機(jī),Oracle公司的整個(gè)產(chǎn)品線(xiàn)包括數(shù)據(jù)庫(kù)服務(wù)器、企業(yè)商務(wù)應(yīng)用套件、應(yīng)用開(kāi)發(fā)和決策支持工具2014-08-08
Oracle創(chuàng)建自增表分區(qū)之按月、按天自增表分區(qū)步驟詳解
這篇文章主要給大家介紹了關(guān)于Oracle創(chuàng)建自增表分區(qū)之按月、按天自增表分區(qū)的相關(guān)資料,Oracle表對(duì)數(shù)據(jù)進(jìn)行月度分區(qū)是一種將數(shù)據(jù)分組的有效方法,此方法是將數(shù)據(jù)根據(jù)它們所屬時(shí)間段將其存儲(chǔ)為不同分區(qū),需要的朋友可以參考下2023-11-11
探討:Oracle數(shù)據(jù)庫(kù)查看一個(gè)進(jìn)程是如何執(zhí)行相關(guān)的實(shí)際SQL語(yǔ)句
本篇文章是對(duì)Oracle數(shù)據(jù)庫(kù)查看一個(gè)進(jìn)程是如何執(zhí)行相關(guān)的實(shí)際SQL語(yǔ)句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
使用JDBC4.0操作Oracle中BLOB類(lèi)型的數(shù)據(jù)方法
這篇文章主要介紹了使用JDBC4.0操作Oracle中BLOB類(lèi)型數(shù)據(jù)的方法,我們需要使用ojdbc6.jar包,本文介紹的非常詳細(xì),需要的朋友可以參考下2016-08-08
日常收集整理oracle trunc 函數(shù)處理日期格式(很實(shí)用)
關(guān)于oracle trunc函數(shù)小編日常收集整理了些,下面把oracle trunc 函數(shù)處理日期格式的相關(guān)介紹分享給大家,感興趣的朋友參考下2015-10-10

