虚心求解一个查询效果的实现

[复制链接]
查看11 | 回复9 | 2014-4-25 05:59:51 | 显示全部楼层 |阅读模式
工作中的一个问题,抽离出来,就是需要达到下面这种效果(想用一条SQL实现 )源表T,两列:其中A列相当于rownum
A
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
本帖最后由 〇〇 于 2014-4-23 22:04 编辑
dens_rank() over(order by a,col1)
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
〇〇 发表于 2014-4-23 22:04
dens_rank() over(order by a,col1)

谢谢你,试了,不行
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
代码如下:

select a,

col1,

sum(rn) over(order by a) col2
from (select a,

col1,

decode(col1,

lag(col1) over(order by a),

0,

1) rn

from t);

回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
bell6248 发表于 2014-4-23 22:29
代码如下:

谢谢了!!
试了,好使!!
真的感谢了~
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
WITH T AS(SELECT 1 RN,10 ID FROM DUAL UNION ALL

SELECT 2,10 FROM DUAL UNION ALL

SELECT 3,20 FROM DUAL UNION ALL

SELECT 4,10 FROM DUAL UNION ALL

SELECT 5,10 FROM DUAL UNION ALL

SELECT 6,30FROM DUAL UNION ALL

SELECT 7,30 FROM DUAL UNION ALL

SELECT 8, 10

FROM DUAL)

SELECT RN, ID, DENSE_RANK() OVER(ORDER BY ID1)

FROM (SELECT RN,

ID,

DECODE(LEAD(ID) OVER(ORDER BY RN), ID, RN, RN - 1) ID1

FROM T) T;复制代码
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
本帖最后由 oracle_cj 于 2014-4-23 22:43 编辑
bell6248 发表于 2014-4-23 22:29
代码如下:

NICE ,bell写的sql很有深度啊,学习了。。。我整复杂了


回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
奔跑的丑小鸭 发表于 2014-4-23 22:32
谢谢了!!
试了,好使!!
真的感谢了~

lz, 这反馈的速度真快!
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
selecttc.*,
(
select min(g.rn) from
(select rownum rn, ta.a ta_a,ta.col1 ta_col1,tb.a tb_a,tb.col1 tb_col1
from t ta,t tb
where ta.a + 1 = tb.a(+)
and (ta.col1tb.col1 or tb.col1 is null)
order by ta.a) g
where g.ta_a >= tc.a
) col2
from t tc order by tc.a asc
回复

使用道具 举报

千问 | 2014-4-25 05:59:51 | 显示全部楼层
bell6248 发表于 2014-4-23 22:29
代码如下:

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行