oracle 窗口函数

类似于

ROW_NUMBER() OVER (PARTITION BY SA.SITE,SA.RESRCE,SA.DATES 
                      ORDER BY SA.SITE,SA.RESRCE,SA.DTIME) AS paixu


分组排序函数,这里有个问题,排序是从1开始排的,假如我想要在sql里面加个判断

若排序(paixu)只有1的话就不显示,若排序(paixu)>1的话,就从1开始排

其实就是分组下面只有一个的话,就不排,为空或者其他什么,只要不显示就好

若不止一个,就从1开始排序(它本身也是从1开始排序的)

13182656102 发布于 2019-10-31 10:10
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
qhlLv6中级互助
发布于2019-10-31 10:24

可以先做子查询,查出每个组内的数量,序号,然后再根据数量判断(case when的方式),如下

select 

(case when cnum>1 then paixu else null end) as paixu

from 

(select 

ROW_NUMBER() OVER (PARTITION BY SA.SITE,SA.RESRCE,SA.DATES 

  ORDER BY SA.SITE,SA.RESRCE,SA.DTIME) AS paixu,

(select count(*) from 表 sb 

where SA.SITE=SB.SITE 

and SA.RESRCE =SB.RESRCE

and SA.DATES=SB.DATES

group by SA.SITE,SA.RESRCE,SA.DATES  ) cnum

from 表 sa

)


  • 13182656102 13182656102(提问者) 你的意思是,把分组下的条数也算出来,如果只有1条就置NULL,多条就按原来的排序是吗?
    2019-10-31 10:31 
  • 13182656102 13182656102(提问者) 但是哥,这条排序的我是在包裹了很多条查询语句,的出来的,像分组的字段做了一些处理的,直接套进去,有点麻烦,嗯,还有简单一点的吗
    2019-10-31 10:33 
  • 13182656102 13182656102(提问者) 我试试在排序的同时,把条数加上去看看行不行
    2019-10-31 10:34 
  • qhl qhl 回复 13182656102(提问者) 逻辑就是这样的,count或者max也可以用left join拼接增加一列
    2019-10-31 10:55 
  • 2关注人数
  • 285浏览人数
  • 最后回答于:2019-10-31 10:24
    请选择关闭问题的原因
    确定 取消
    返回顶部