数学建模社区-数学中国

标题: oracle中关于null排序的问题 选择自 shaokun305 的 Blog [打印本页]

作者: kampoo    时间: 2005-12-29 17:44
标题: oracle中关于null排序的问题 选择自 shaokun305 的 Blog
<>oracle中关于null排序的问题</P># _- f1 e) O- i- H8 e- i
<>问题描述:<BR>在处理一般的数据记录中,对于数字类型的字段,在oracle的排序中,默认把null值做为<BR>大于任何数字的类型,当然对于varchar2类型的字段,默认也是该处理方式,但是客户<BR>要求排序的过程中,需要把null的字段默认排在前边(从小--&gt;大)。一般的<BR>order by xxxx,无法解决。</P># o6 c4 H; O/ S0 C6 W; [
<>问题解决:<BR>方案1:<BR>可以使用复杂的使用sql:</P>
4 e& S4 W  b" c<>select * from <BR>(select a.*,rownum as my_sys_rownum from (<BR>select deptid,nvl(BDZNAME,' '),nvl(VOLLEVEL,'0'),ZBRL,nvl(ZBTS, '0'),nvl(FZR,'0'),nvl(DEPTIDDES,' '),nvl(TEL,' '),nvl(RUNSTATEDES,' '),nvl(ADDRESS,' '),BDZID from V_BDZ where  rownum&lt;2000 </P>
- V  v7 ?" P+ r6 l<>and ZBRL is null</P>
/ \1 S' U" @6 \: Y0 e<>) a<BR>union<BR>select b.*,rownum+(select count(*) from (<BR>select deptid,nvl(BDZNAME,' '),nvl(VOLLEVEL,'0'),ZBRL,nvl(ZBTS, '0'),nvl(FZR,'0'),nvl(DEPTIDDES,' '),nvl(TEL,' '),nvl(RUNSTATEDES,' '),nvl(ADDRESS,' '),BDZID from V_BDZ where  rownum&lt;2000 </P>
+ X* ~% O, w  s- L5 G8 |<>and ZBRL is null</P>
' X! B0 ^5 W3 y( N8 g4 V, d$ I<>)) as my_sys_rownum from (<BR>select deptid,nvl(BDZNAME,' '),nvl(VOLLEVEL,'0'),ZBRL,nvl(ZBTS, '0'),nvl(FZR,'0'),nvl(DEPTIDDES,' '),nvl(TEL,' '),nvl(RUNSTATEDES,' '),nvl(ADDRESS,' '),BDZID from V_BDZ where  rownum&lt;2000 </P>
( \. a0 K7 w. x/ a+ e  P7 P<>and ZBRL is not null order by ZBRL <BR>) b<BR>)<BR>order by my_sys_rownum desc</P>7 W. C$ u; U6 C7 T2 z* Z
<>方案2:<BR>可以利用oracle中可以对order by中对比较字段做设置的方式来实现:<BR>  如:  ……order by nvl( aaa,'-1')</P><BR>
作者: fuelout2006    时间: 2006-4-28 11:32
对啊
作者: shinhwaonly1    时间: 2007-1-5 12:55
不太清楚




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5