资源描述:
《oracle比较decode(casewhen)、4种去重和去重中的统计函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、oracle比较decode/casewhen、4种去重和去重中的统计函数一:decode和casewhendecode(expression,search_1,result_1,search_2,result_2,....,search_n,result_n,default)decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。selectusername,decode(lock_date,null,'unlocked','locked')statusfrom
2、t;----------------如果lock_date是null就返回unlocked如果不是null就返回lockedselectusername,decode(lock_date,null,'unlocked')statusfromt;----------------如果lock_date是null就返回unlocked否则是空(因为没有定义)例如有个学生表......行转列-------createtablescore2(namevarchar2(10),Languagenumber(3),Mathnumber(3),Engl
3、ishnumber(3));insertintoscore2values('Zhang',80,67,95);insertintoscore2values('Li',79,84,62);insertintoscore2(name,Language)values('Chen',88);commit;Select*fromscore2;显示成报表的格式.......selectname,sum(decode(subject,'Language',grade,0))"Language",sum(decode(subject,'Math',gr
4、ade,0))"Math",sum(decode(subject,'English',grade,0))"English"fromscoregroupbyname;NAMELanguageMathEnglish--------------------------------------------------Zhang809276Wang7300Li819550第二列,如果subject='Language',那么就显示成绩,否则显示为0第三列,如果subject='Math',那么就显示成绩,否则显示为0第四列,如果subject='
5、English',那么就显示成绩,否则显示为0CasewhenCase[selector]---selector可以不设置Whenid=1THEN‘id是1’;ELSE‘没有id值’;ENDCASE;---->如果ID=1就显示id是1否则显示没有id值~~~~~上面用casewhen显示.................selectt.name,sum(casewhent.subject='Language'thent.gradeelse0end)dd,sum(casewhent.subject='Math'thent.gradeel
6、se0end)Math,sum(casewhent.subject='English'thent.gradeelse0end)Englishfromscoretgroupbyt.name;二:去重的4中方法createtabletest(c1int,c2varchar2(10));insertintotestvalues(1,'Smith');insertintotestvalues(1,'Smith');insertintotestvalues(2,'John');insertintotestvalues(1,'Jack');inse
7、rtintotestvalues(2,'Jack');insertintotestvalues(2,'John');insertintotestvalues(2,'John');commit;一种方法:distinct把之前的表去重显示并创建,droptableold_table;createtabletmp_testasselectdistinct*fromtest1;---创建临时表droptabletest1;altertabletmp_testrenametotest1;第二种rowiddeletefromtestwherero
8、wid<>(selectmin(rowid)fromtestbwhereb.c1=test.c1andb.c2=test.c2)第三种方法:分组,rowiddeletefromtesttwheret.row