表A 结构
tableid [单据序号]
lines [行号]现在我的 表A 中行号有点乱,我想每张单的行号进行排序,请问用什么办法比较好?
我不想用 游标,因为语句太多了,希望能用最简单的语句来实出 , 因我要对很多个表进行处理 .即 A01# 单 行号: 1
A01# 单 行号: 2 B02# 单 行号: 1
B02# 单 行号: 2
B02# 单 行号: 3
tableid [单据序号]
lines [行号]现在我的 表A 中行号有点乱,我想每张单的行号进行排序,请问用什么办法比较好?
我不想用 游标,因为语句太多了,希望能用最简单的语句来实出 , 因我要对很多个表进行处理 .即 A01# 单 行号: 1
A01# 单 行号: 2 B02# 单 行号: 1
B02# 单 行号: 2
B02# 单 行号: 3
解决方案 »
- oracle中表之间的纠结
- 存储过程 的sql写法
- Oralce连接到sqlserver数据库后,在oracle中如何写sql语句查询,添加,修改,删除数据.
- 关于oracle中一个获取数字的问题!
- between and 的问题
- 提问:替换查询内容的基础sql
- 想用execute immediate执行一条update的SQL语句,但不成功,请各位帮看看
- 請教:data數據怎麽顯示為 'yyyymmdd:hh:mm'格式
- 怎么存入数据库中DATE型字段的数据是:23-三月 -0005 12:00:00 AM,我想想变成“yyyy-mm-dd”格式的日期
- 请问:哪里有Oracle系统自带SQL函数(如TO_CHAR,SUBSTR)的说明/参考文档下载?
- 请问大家这个SQL怎样写,能产生一个从m到n的所有整数?
- 如何做到oracle数据库同步?
from 表A
order by tableid,lines-----------------
不清楚你要干什么,能再说一遍么?
---------------------------
A01# 单 行号: 6
A01# 单 行号: 9 B02# 单 行号: 1
B02# 单 行号: 5
B02# 单 行号: 20
我希望更改后成为如下:
---------------------------
A01# 单 行号: 1
A01# 单 行号: 2 B02# 单 行号: 1
B02# 单 行号: 2
B02# 单 行号: 3
CREATE INDEX idx_tablex_lineno ON tablex(lineno) ASC
用 select * from tablex order by lineno asc
2 tableid char(10),
3 lines number(6)
4 );表已创建。SQL> insert into A values ('A01# 单',6);已创建 1 行。SQL> insert into A values ('A01# 单',9);已创建 1 行。SQL> insert into A values ('B02# 单',2);已创建 1 行。SQL> insert into A values ('B02# 单',6);已创建 1 行。SQL> insert into A values ('B02# 单',23);已创建 1 行。SQL> commit;提交完成。SQL> select * from A order by tableid,lines;TABLEID LINES
---------- ----------
A01# 单 6
A01# 单 9B02# 单 2
B02# 单 6
B02# 单 23SQL> declare
2 cursor c is select distinct tableid from a;
3 crow c%rowtype;
4 begin
5 open c;
6 loop
7 exit when c%NotFound;
8 fetch c into crow;
9 update a
10 set lines = rownum
11 where a.tableid = crow.tableid;
12 end loop;
13 close c;
14 commit;
15* end;
16 /PL/SQL 过程已成功完成。SQL> select * from a;TABLEID LINES
---------- ----------
A01# 单 1
A01# 单 2B02# 单 1
B02# 单 2
B02# 单 3
select A.*,dense_rank()over(partition by tableid order by lines) as rn
from A;
update A
set A.lines=(select rn from B where B.tableid=A.tableid
B.lines=A.lines);
drop table B;
这样做可能算比较麻烦的.我也暂时想不到好的方法!
update fix_entry t1 set f_lines = (select count(*) from fix_entry t2 where t1.f_TABLE_ID = t2.f_TABLE_ID and t2.f_rcd_id <= t1.f_rcd_id);谢谢大家的帮忙! 更谢谢 (寻) !:)
----------------------
怎么会变一样的呢,是你哪里写错了吧SQL> select * from a;TABLEID LINES
-------------------- ----------
A01# 单 6
A01# 单 9
B02# 单 1
B02# 单 5
B02# 单 20SQL> update a t1 set lines = (select count(*) from a t2 where t1.TABLEID = t2.TABLEID and t2.lines <= t1.lines);5 rows updatedSQL> select * from a;TABLEID LINES
-------------------- ----------
A01# 单 1
A01# 单 2
B02# 单 1
B02# 单 2
B02# 单 3