oracle oracle中的case whenn 满足多个条件后可以对字段进行格式转换吗??

Oracle统计多个,满足条件的字段的数&Table:ABCTablea & &b & & c1 & &2 & & 12 & &1 & & 33 & &1 & & 2统计a=1的有几个,b=1的有几个,c=1的有几个&1. select &count(*) &from ABCTable where a=1;& & select &count(*) &from ABCTable where b=1;& & select &count(*) &from ABCTable where c=1;&2. SELECT &SUM(CASE WHEN a=1 THEN 1 ELSE 0 END) ,& & & & & & & & & & & & &SUM(CASE WHEN b=1 THEN 1 ELSE 0 END) ,& & & & & & & & & &SUM(CASE WHEN c=1 THEN 1 ELSE 0 END) ,& & &FROM &ABCT&&oracle中数据格式
今天遇到的一个查找数据库百分比率的题目,在这里先记录下来:
select sid,to_char(sum(case when
scorce&=60 then 1 else 0
end)*100/(count(*)),'FM9999') || '%' d from test group by
红色表示计算百分比数,FM表示去除空格(因为如果它不够4位就自动加上空格)
蓝色表示加上百分号字符串“%”,用||来加。
格式化函数
to_char(timestamp,
把时间戳转换成字串
to_char(current_timestamp,
'HH12:MI:SS')
to_char(interval,
把时间间隔转为字串
to_char(interval '15h 2m 12s',
'HH24:MI:SS')
to_char(int,
把整数转换成字串
to_char(125, '999')
to_char(double precision,
把实数/双精度数转换成字串
to_char(125.8, '999D9')
to_char(numeric,
把 numeric 转换成字串
to_char(numeric '-125.8', '999D99S')
to_date(text,
把字串转换成日期
to_date('05 Dec 2000', 'DD Mon
to_timestamp(text,
把字串转换成时间戳
to_timestamp('05 Dec 2000', 'DD Mon
to_number(text,
把字串转换成 numeric
to_number('12,454.8-', '99G999D9S')
用于日期/时间格式化的模板
一天的小时数 (01-12)
一天的小时数 (01-12)
一天的小时数 (00-23)
分钟 (00-59)
秒 (00-59)
毫秒 (000-999)
微秒 (999)
午夜后的秒 (0-86399)
AM 或 A.M. 或 PM 或
正午标识(大写)
am 或 a.m. 或 pm 或
正午标识(小写)
带逗号的年(4 和更多位)
年(4和更多位)
年的后三位
年的后两位
年的最后一位
BC 或 B.C. 或 AD 或
纪元标识(大写)
bc 或 b.c. 或 ad 或
纪元标识(小写)
全长大写月份名(空白填充为9字符)
全长混合大小写月份名(空白填充为9字符)
全长小写月份名(空白填充为9字符)
大写缩写月份名(3字符)
缩写混合大小写月份名(3字符)
小写缩写月份名(3字符)
月份号(01-12)
全长大写日期名(空白填充为9字符)
全长混合大小写日期名(空白填充为9字符)
全长小写日期名(空白填充为9字符)
缩写大写日期名(3字符)
缩写混合大小写日期名(3字符)
缩写小写日期名(3字符)
一年里的日子(001-366)
一个月里的日子(01-31)
一周里的日子(1-7;周日=1)
一个月里的周数(1-5)(第一周从该月第一天开始)
一年里的周数(1-53)(第一周从该年的第一天开始)
ISO 一年里的周数(第一个星期四在第一周里)
世纪(2 位)
儒略日(自公元前日来的天数)
罗马数字的月份(I-XII;I=JAN)(大写)
罗马数字的月份(I-XII;I=JAN)(小写)
时区字串 (大写)
时区字串 (小写)
日期/时间格式化的模板模式修饰词
填充模式(抑制填充空白和零)
大写顺序数后缀
小写顺序数后缀
固定格式全局选项(见用法须知)
&FX Month DD Day
拼写模式(还未实现)
抑制前导的零或尾随的空白,如果没有使用它的话,会在输出中增加这些填充最终把输出变成固定宽度的模式。
如果没有使用 FX 选项,
to_timestamp 和 to_date 在转换字串的时候忽略多个空白。
FX 必须做为模板里的第一个项声明。 比如 to_timestamp('2000 JUN', 'YYYY
MON') 是正确的, to_timestamp('2000 JUN', 'FXYYYY MON')
会返回一个错误,因为to_timestamp 只预料会有一个空白。
在 to_char
模板里可以有普通文本,并且它们会被照字输出。 你可以把一个字串放到双引号里强迫它解释成一个文本,
即使它里面包含模式关键字也如此。比如,在 '"Hello Year "YYYY', YYYY
将被年份数据代替,但是Year里单独 的 Y 不会。
如果你想在输出里有双引号,那么你必须在它们 前面放双反斜杠,比如
'\\"YYYY Month\\"'. (需要两个反斜杠是因为反斜杠在字串常量里已经有特殊含义了。)
如果你使用的年份长于 4 位字符,那么用 YYYY
从字串向timestamp或者date 做转换时要受到限制。 你必须在 YYYY
后面使用一些非数字字符或者模板, 否则年份总是解释为 4 位数字。比如(对于 2000 年):
to_date('', 'YYYYMMDD') 将会被解释成一个 4
位数字的年份,最好在年后面使用一个非数字的分隔符,象 to_date('',
'YYYY-MMDD') 或 to_date('2000Nov31', 'YYYYMonDD')。
将字串转化为timestamp时,毫秒(MS)和微秒(US)都是用字串
的小数点后面的部分转换的。比如 to_timestamp('12:3', 'SS:MS') 不是 3 毫秒, 而是
300,因为转换把它看做 12 + 0.3 秒。 这意味着对于格式 'SS:MS'而言,输入值为 12:3 或
12:30或12:300 声明了相同数目的 毫秒。对于三毫秒,你必须使用
12:003,那么转换会把它看做 12 + 0.003 = 12.003 秒。
用于数值格式化的模板模式
带有指定数值位数的值
带前导零的值
分组(千)分隔符
尖括号内负值
带符号的数值(使用区域设置)
货币符号(使用区域设置)
小数点(使用区域设置)
分组分隔符(使用区域设置)
在指明的位置的负号(如果数字
在指明的位置的正号(如果数字 & 0)
在指明的位置的正/负号
罗马数字(输入在 1 和 3999 之间)
移动指定位(小数)(参阅注解)
科学记数。(现在还未实现)
to_char 例子
to_char(current_timestamp, 'Day, DD
HH12:MI:SS')
'Tuesday , 06 05:39:18'
to_char(current_timestamp, 'FMDay, FMDD
HH12:MI:SS')
'Tuesday, 6 05:39:18'
to_char(-0.1, '99.99')
to_char(-0.1, 'FM9.99')
to_char(0.1, '0.9')
to_char(12, '')
to_char(12, 'FM')
to_char(485, '999')
to_char(-485, '999')
to_char(485,'9 9 9')
to_char(1485, '9,999')
to_char(1485, '9G999')
to_char(148.5, '999.999')
' 148.500'
to_char(148.5, 'FM999.999')
to_char(148.5, 'FM999.990')
to_char(148.5, '999D999')
' 148,500'
to_char(3148.5, '9G999D999')
' 3 148,500'
to_char(-485, '999S')
to_char(-485, '999MI')
to_char(485, '999MI')
to_char(485, 'FM999MI')
to_char(485, 'PL999')
to_char(485, 'SG999')
to_char(-485, 'SG999')
to_char(-485, '9SG99')
to_char(-485, '999PR')
to_char(485, 'L999')
to_char(485, 'RN')
' CDLXXXV'
to_char(485, 'FMRN')
to_char(5.2, 'FMRN')
to_char(482, '999th')
to_char(485, '"Good number:"999')
'Good number: 485'
to_char(485.8, '"Pre:"999" Post:"
'Pre: 485 Post: .800'
to_char(12, '99V999')
to_char(12.4, '99V999')
to_char(12.45, '99V9')
想把一个带小数点的Number型转换成String型的话:
select TO_CHAR(,
'FM999,999,999,990.90')
结果是:100,000.00
说明:FM前缀的作用是去除首尾的空字符或0,如果select
TO_CHAR(, 'FM999,999,999,999.99')
结果是:100,000.
日期格式化:
SELECT&TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"')&FROM&&&
SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM
附:oracle补零
1.前端补0:
select&lpad('345',8,'0')&from&
select&to_char('345','')&from&&&
select lpad('345',8,'0')
select to_char('345','')
2.后端补0:
&&&&select&rpad('345',8,'0')&from&&&
select rpad('345',8,'0') from
文章来源:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。相关文章推荐:
oracle case when
我们都知道Case when的用法,一旦满足了某一个WHEN ,则这一条数据就会退出CASE WHEN,而不再考虑其他CASE,现在有没有一种写法可以满足多个CASE的??用CASE WHEN好像不能满足。不知道各位大虾有没有好的办法解决。
例子如下:
create table feng_test(id number, val varchar2(20);
insert into feng_test(id,val)values(1,'abcde');
insert into feng_test(id,val)values(2,'abc');
SQL>select * from feng_
-------------------
SQL>sele...
回复 (18) 浏览 (10917)
其他文章推荐
ITPUB官方微博:
WhichNLSparametercanbeusedtochangethedefaultOraclesortmethodfrombinarytolinguisticfortheSQLSELECTstatement?A.NLS_LANGB.NLS_COMPC.NLS_SORTD.Noneoftheabove答案是D感觉应该选C大家认为呢~~~~...
回复 (1) 浏览 (66)
日,甲骨文公司日前宣布推出Oracle数据库机X3-2(OracleDatabaseApplianceX3-2)。据说与原版本相比,该集成系统的最新版本性能可提升两倍,同时存储容量能够扩大超过4倍。客户只需简单连接存储扩展机架即可不断拓展其数据容量,而无需进行额外管理操作。讨论话 ......
回复 (10) 浏览 (184)
国外oracle口头offer第一帖http://www./forums/waiting-on-offer-letter-from-oracle-for-bdc-t5107/国内oracle口头offer第一帖/post-no20-.shtml总结:verbaloffer到realoffer,三天~三百六十五天,都有可能...
回复 (4) 浏览 (123)
不完全恢复是不是一定要备份所有的数据文件,如果只修改USER01.DBF数据文件中表的数据,是不是只备份USER01.DBF数据文件,然后利用SCN也可以不完全恢复呢?...
回复 (6) 浏览 (102)
我在ReadPPmasterdata时出现错误,如下:这是什么意思啊?该如何解决呢?...
回复 (1) 浏览 (59)
oracle物化视图知识比较繁杂,本文为oracle物化视图系列(二)--子查询的表名不能与物化视图的名称相同Cause:Theprebuiltcontainertableofthematerializedviewwasreferencedinthedefinitionquery.&Action:Changethedefinitionquerytoreferenceanon-prebuilttable.SQ ......
回复 (3) 浏览 (5)
1,自oracle11g始,sga和pga管理可以由oracle完全自动管理2,11g内存管理有2种方法:自动管理(指定一个内存总大小);&&&&&&&&&&&&&&&&&& ......
回复 (5) 浏览 (9)
LRU(最近最少使用算法)/MRU(最近最常使用算法)LRU算法(Leastrecentlyused)的基本概念是:当内存的剩余的可用空间不够时,缓冲区尽可能的先保留使用者最常使用的数据,换句话说就是优先清除”较不常使用的数据”,并释放其空间.之所以”较不常使用的数据”要用引号是因为这里 ......
回复 (3) 浏览 (184)
&&&&&&&这篇文章讨论一下在Windows2008R2上安装10gRAC的注意事项。1).Oracle专门针对Windows2008操作系统发布了10.2.0.4的安装介质:10204_vista_w2k8_x64_production_client.zip10204_vista_w2k8_x64_production_com ......
回复 (4) 浏览 (89)
最近team讨论BindGraduation比较激烈,主要是因为有个sql的子游标过多(我们的acs已经禁用掉):SQL&selectcount(*)fromv$sqlwheresql_id='27svyp3s52cu0';&&COUNT(*)----------&&&&&1788SQL&selectcount(*) ......
回复 (4) 浏览 (29)
文章推荐:
盛拓传媒:
友情链接:
特别鸣谢:
北京皓辰网域网络信息技术有限公司. 版权所有
北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证:编号(京)字第1149号
ITPUB推荐文章解答你所有技术难题Oracle中case语句与decode()方法的区别?
[问题点数:10分,结帖人qulimin18]
Oracle中case语句与decode()方法的区别?
[问题点数:10分,结帖人qulimin18]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2009年11月 Oracle大版内专家分月排行榜第二2009年10月 Oracle大版内专家分月排行榜第二
2009年5月 Oracle大版内专家分月排行榜第三
2015年6月 Oracle大版内专家分月排行榜第一2015年4月 Oracle大版内专家分月排行榜第一2015年3月 Oracle大版内专家分月排行榜第一2015年2月 Oracle大版内专家分月排行榜第一2014年6月 Oracle大版内专家分月排行榜第一2009年11月 Oracle大版内专家分月排行榜第一2009年10月 Oracle大版内专家分月排行榜第一
2015年7月 Oracle大版内专家分月排行榜第二2015年1月 Oracle大版内专家分月排行榜第二2014年12月 Oracle大版内专家分月排行榜第二2014年11月 Oracle大版内专家分月排行榜第二2014年8月 Oracle大版内专家分月排行榜第二2014年7月 Oracle大版内专家分月排行榜第二2014年5月 Oracle大版内专家分月排行榜第二2010年1月 Oracle大版内专家分月排行榜第二2009年9月 Oracle大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。> (求高人指点指点)oracle高手过招:使用case when then替换字段数据,比实际的多了几百条数据 求解,该如何解决
(求高人指点指点)oracle高手过招:使用case when then替换字段数据,比实际的多了几百条数据 求解,该如何解决
guoeui007 & &
发布时间: & &
浏览:11 & &
回复:5 & &
悬赏:0.0希赛币
(求高人指点指点)oracle高手过招:使用case when then替换字段数据,比实际的多了几百条数据 求解  SQL code   create or replace procedure proc4(qihao in varchar2) is sr_ cp_id varchar2(50); kh_id varchar2(50); gs_id varchar2(50);
open cur_cpkh for select sum(sr) ,c.col_1_1_214_14 ,
case s.www06
when 12 then 'KH'
when 13 then'KH'
when 14 then 'KH'
when 16 then 'KH'
when 17 then 'KH'
when 18 then 'KH'
when 20 then 'KH'
when 21 then 'KH'
when 22 then 'KH'
when 23 then 'KH'
when 25 then 'KH'
when 26 then 'KH'
when 27 then 'KH'
when 29 then 'KH'
when 30 then 'KH'
when 31 then 'KH'
when 32 then 'KH'
when 33 then 'KH'
when 34 then 'KH'
when 60 then 'KH0905'
when 99 then 'KH0903'
else '其他' end ,
s.gsdm from sab4 s, cpdtb c where s.qijian=qijian
and c.col_1_1_214_3=l_1_1_214_14 is not null group by s.gsdm,
case s.www06
when 12 then 'KH'
when 13 then'KH'
when 14 then 'KH'
when 16 then 'KH'
when 17 then 'KH'
when 18 then 'KH'
when 20 then 'KH'
when 21 then 'KH'
when 22 then 'KH'
when 23 then 'KH'
when 25 then 'KH'
when 26 then 'KH'
when 27 then 'KH'
when 29 then 'KH'
when 30 then 'KH'
when 31 then 'KH'
when 32 then 'KH'
when 33 then 'KH'
when 34 then 'KH'
when 60 then 'KH0905'
when 99 then 'KH0903'
else '其他' end ,c.col_1_1_214_14 ;
fetch cur_cpkh into sr_id,cp_id,kh_id,gs_
exit when cur_cpkh%
end proc4; 上面的是使用case进行替换的 将(12,13,14。。。)替换成(kh4974456。。。)这一类的数据  SQL code  select sum(sr) ,c.col_1_1_214_14 ,s.www06 ,s.gsdm from sab4 s, cpdtb c where s.qijian=201105
and c.col_1_1_214_3=l_1_1_214_14 is not null group by s.gsdm,s.www06,c.col_1_1_214_14; 第一个数据用select count(*) from 上上一张表总数是9364,下面的一张表是9041条数据求解
一般记录数不匹配,就检查你的group by,如果有表连接就检查连接是否需要用到外连接,有没有用对……你例子的SQL太长,没看- -|||
guofei_gf & &
& & (0)(0)
具体没有分组group by
guofeifunny & &
& & (0)(0)
悲哀,不是 case ... when 语句的问题撒,不信:你去掉case ... when 看一下:查询是不是返回一样的数据行!-- 是你表连接的问题!-- 你先整清楚各表之间 的业务关系是什么?-- 然后:整清楚各表之间的连接条件有哪些?是不是哪两个表连接的时候,您给的连接条件不够的原因!
guofeixue & &
& & (0)(0)我觉得可能是你case以后空值会变成‘其他’,不用case直接被is not null过滤了
guofeng1 & &
& & (0)(0)探讨我觉得可能是你case以后空值会变成‘其他’,不用case直接被is not null过滤了guofeii & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&&&增值电信业务经营许可证湘B2-

我要回帖

更多关于 oracle sql case when 的文章

 

随机推荐