一条sql统计语句,请教!

无爱大叔 2013-01-03 05:28:41
表结构及数据,已经经过简化了
申请单id 是否通过 当前步骤
sqdid sftg dqbz
19 1 1
19 0 1
6 1 1
6 0 1
7 0 1
7 1 1
8 1 1
8 0 1
9 1 1
9 0 1
10 1 1
10 0 1
18 1 1
18 0 1
22 1 1
22 0 1
如上表,判断相同申请单ID,最大当前步骤(如果有多个那么多个并列,例子里都是1,还有2、3、4等)
如果最大当前步骤只有一条,那么判断它的是否通过(sftg字段,0未审批,1通过,2拒绝),加入统计数量;
如果最大当前步骤有多条,那么取是否通过最大的那条(有且仅有一条最大的),加入统计数量;

期望结果:(这个统计结果与上面数据无关)
未审批 1
通过 2
拒绝 0
...全文
626 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
无爱大叔 2013-01-04
  • 打赏
  • 举报
回复
谢谢,回答的很准确,马上结贴
dut703 2013-01-03
  • 打赏
  • 举报
回复
with tmp as ( select 19 sqdid, 1 sftg, 1 dqbz from dual union all select 19 , 0 , 1 from dual union all select 6 , 1 , 1 from dual union all select 6 , 0 , 1 from dual union all select 7 , 0 , 1 from dual union all select 7 , 1 , 1 from dual union all select 8 , 1 , 1 from dual union all select 8 , 0 , 1 from dual union all select 9 , 1 , 1 from dual union all select 9 , 0 , 1 from dual union all select 10 , 1 , 1 from dual union all select 10 , 0 , 1 from dual union all select 18 , 1 , 1 from dual union all select 18 , 0 , 1 from dual union all select 22 , 1 , 1 from dual union all select 22 , 0 , 1 from dual ) SELECT decode(t.sftg,'0','未审批','1','通过','2','拒绝'), COUNT(*) FROM ( SELECT dense_rank() OVER (partition BY a.sqdid ORDER BY a.dqbz DESC, a.sftg DESC) NUM, a.* FROM tmp a ) t WHERE t.num = 1 GROUP BY t.sftg

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧