Oracle 中 RowNumer的用法...
---RowNumer的用法---
/*
--来源自 www.itpub.net--
这个sql如何写?
一个表,有两个字段
sn,money
1 10
2 2
3 50
5 3
6 40
9 100
......
现在要写一个查询,将sn连续的行合并成一条数据,money字段求和
如:
1-3 62
5-6 43
9 100
能否用一条sql搞定?
*/
--Create Table TB_B--
Create Table TB_B
(
sn number(2),
money number(4)
)
--Insert data to Table--
insert into TB_B
select 1,10 from dual
union
select 2,2 from dual
union
select 3,50 from dual
union
select 5,3 from dual
union
select 6,40 from dual
union
select 9,100 from dual
--Retrieve Sql--
select case when min(sn)=max(sn) then
to_char(min(sn))
else
to_char(min(sn))||'-'||to_char(max(sn))
end
,sum(money) money
from TB_B
group by sn-rownum
order by min(sn)
--Rownm 的解释--
/*
SQL> select sn,rownum,sn-rownum from tb_b;
SN ROWNUM SN-ROWNUM
---------- ---------- ----------
1 1 0
2 2 0
3 3 0
5 4 1
6 5 1
9 6 3
其实就是利用sn和rownum的差值来判断sn是否连号
*/