表数据:
rowid dataid data
1 1 A
2 1 A
3 2 B
4 2 B
5 3 A
6 3 A
7 4 D
8 4 D
9 5 B
10 5 B
要求按照rowid顺序排列,对data进行分组,每组编一个序号dataid,
关键在于data中相等的地方不一定是同一组序号,完全按照rowid顺序来,最终要求实现一个sql语句来更新dataid
rowid dataid data
1 1 A
2 1 A
3 2 B
4 2 B
5 3 A
6 3 A
7 4 D
8 4 D
9 5 B
10 5 B
要求按照rowid顺序排列,对data进行分组,每组编一个序号dataid,
关键在于data中相等的地方不一定是同一组序号,完全按照rowid顺序来,最终要求实现一个sql语句来更新dataid
解决方案 »
- PL/SQL不能提交,点提交按钮多次都不会变成灰色
- [急切求助]Select调用Function,这个Function还可以写数据库么?
- 有个麻烦的问题,请来帮助下 ,马上结贴
- 数据库转移——导入导出、备份还原
- 求OSB客户端实例
- 再开一贴..日期对比小问题...在线等.
- mdf的數據庫表怎么導入oracle9i中???
- 急!!!怎么写这个触发器?-自动删除表中90天以后的信息……来者有份
- sqlplus
- 关于session(会话)与process(进程)的问题再次请教各位高手。
- 一天一夜没睡觉了,急死了!!!ORACLE数据库中有两个表不能插入数据,查询的时候需要几个小时,怎么办?经过检测,表也没有被锁!
- 求一天中每小时的数据量-----这个SQL如何写,请牛人提供思路。
同理第5行的dataid应该等于前5行的count_flg的总和,即(1+0+1+0+1) = 3 依次类推。
rowid dataid data data2 count_flg
1 1 A 1
2 1 A A 0
3 2 B A 1
4 2 B B 0
5 3 A B 1
6 3 A A 0
7 4 D A 1
8 4 D D 0
9 5 B D 1
10 5 B B 0
注:这里面的data2列是data列向下挪一行之后的值SQL文如下:
UPDATE table t6
SET t6.dataid = (select t5.data_id
from
(select t4.rowid
,(select SUM(t3.count_flg)
from
(
select t1.rowid
,t1.data AS data
,t2.data AS data2
,DECODE(t1.data, t2.data, 0, 1) AS count_flg
from table t1
table t2
where t1.rowid = (t2.rowid + 1)(+)
) t3
where t3.rowid <= t4.rowid) AS data_id
from table t4) t5
where t5.rowid = t6.rowid)仅供参考!
1 1 A — 1
2 1 A A 0
3 2 B A 1
4 2 B B 0
5 3 A B 1
6 3 A A 0
7 4 D A 1
8 4 D D 0
9 5 B D 1
10 5 B B 0