大家替我看看一条SQL能解决不?感觉有点麻烦
表TAB1(PK:COL1)
COL1 COL2
------------
1 A
2 A
3 B
4 B
6 B
5 B
9 B
10 C
11 C
转化为:
表TAB2(PK:COLA)
COLA COLB COLC
--------------------
1 2 A
3 6 B
9 9 B
10 11 C
说明:TAB1中COL1是一个顺序值,但可能不连续,也可能顺序乱了,要求转换到TAB2,其中COLA的意思是顺序开始值,COLB的意思是顺序结束值,转化的规则要求将TAB1一条条的记录分段放入TAB2,即TAB1中COL1先排升序后,若COL1中断不连续或者COL2值发生变化时在转入TAB2时另起一行。如果是用后台过程我知道转换,现在想请教用SQL通过分组行不行?另外表TAB1里数据有400万来条,用后台过程处理速度快还是用SQL?
------解决方案--------------------SQL> desc test
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(10)
SQL> select * from test
2 ;
ID NAME
---------- ----------
1 A
2 A
3 B
4 B
6 B
5 B
9 B
10 C
11 C
12 B
13 B
ID NAME
---------- ----------
14 B
12 rows selected.
SQL> select min(id),max(id),name
2 from (select name,id,id-rownum newid
3 from (select id,name from test order by name,id))
4 group by name,newid
5 /
MIN(ID) MAX(ID) NAME
---------- ---------- ----------
1 2 A
12 14 B
3 6 B
9 9 B
10 11 C
------解决方案--------------------或者
select min(id),max(id),name
from (select id,
name,
id-row_number() over (partition by name order by name,id) newid
from test)
group by name,newid
/
MIN(ID) MAX(ID) NAME
---------- ---------- ----------
1 2 A
10 11 C
9 9 B
12 14 B
3 6 B