让一条SQL弄得头脑发昏
--------------------------------------------
有三个表:
表1:
*第一分类code
第一分类name
表2:
*第一分类code
*第二分类code
第二分类name
表3:
*第一分类code
*第二分类code
*第三分类code
第三分类name
选项个数
--------------------------------------------
*为主件
逻辑很简单,三个表关联,取“选项个数=0”的部分。
麻烦出来了,以第三分类code进行排序(升序),需要取一个count,这个count是排序后“选项个数=0”的这条记录的位置。也就是说,count是在未排除“选项个数=0”之前的位置。
假如数据类似:第一分类code 第二分类code 第三分类code 选项个数
XXX1 YYY1 ZZZ1 1
XXX2 YYY2 ZZZ2 2
XXX3 YYY3 ZZZ3 3
XXX4 YYY4 ZZZ4 0
TTT1 MMM1 NNN1 1
TTT2 MMM2 NNN2 2
TTT3 MMM3 NNN3 3
TTT4 MMM4 NNN4 0
------------------------------------------------------------
要取得的数据结果为:XXX4 YYY4 ZZZ4 4
TTT4 MMM4 NNN4 8
问题就是这个4,8上了。如何写SQL呢?或者直接有Oracle的函数可以取得位置?
非常着急,搞定立即结贴。
--------------------------------------------
有三个表:
表1:
*第一分类code
第一分类name
表2:
*第一分类code
*第二分类code
第二分类name
表3:
*第一分类code
*第二分类code
*第三分类code
第三分类name
选项个数
--------------------------------------------
*为主件
逻辑很简单,三个表关联,取“选项个数=0”的部分。
麻烦出来了,以第三分类code进行排序(升序),需要取一个count,这个count是排序后“选项个数=0”的这条记录的位置。也就是说,count是在未排除“选项个数=0”之前的位置。
假如数据类似:第一分类code 第二分类code 第三分类code 选项个数
XXX1 YYY1 ZZZ1 1
XXX2 YYY2 ZZZ2 2
XXX3 YYY3 ZZZ3 3
XXX4 YYY4 ZZZ4 0
TTT1 MMM1 NNN1 1
TTT2 MMM2 NNN2 2
TTT3 MMM3 NNN3 3
TTT4 MMM4 NNN4 0
------------------------------------------------------------
要取得的数据结果为:XXX4 YYY4 ZZZ4 4
TTT4 MMM4 NNN4 8
问题就是这个4,8上了。如何写SQL呢?或者直接有Oracle的函数可以取得位置?
非常着急,搞定立即结贴。
where 选项个数=0 order by 第三分类code
(
onecode varchar2(20)
);create table e_2
(
onecode varchar2(20),
twocode varchar2(20)
);create table e_3
(
onecode varchar2(20),
twocode varchar2(20),
threecode varchar2(20),
item number
);drop table e_3insert into e_1 values('xxx1');insert into e_1 values('xxx2');insert into e_1 values('xxx3');insert into e_1 values('xxx4');insert into e_1 values('ttt1');insert into e_1 values('ttt2');insert into e_1 values('ttt3');insert into e_1 values('ttt4');insert into e_2 values('xxx1', 'yyy1');insert into e_2 values('xxx2', 'yyy2');insert into e_2 values('xxx3', 'yyy3');insert into e_2 values('xxx4', 'yyy4');insert into e_2 values('ttt1', 'mmm1');insert into e_2 values('ttt2', 'mmm2');insert into e_2 values('ttt3', 'mmm3');insert into e_2 values('ttt4', 'mmm4');insert into e_3 values('xxx1', 'yyy1', 'zzz1', 1);insert into e_3 values('xxx2', 'yyy2', 'zzz2', 2);insert into e_3 values('xxx3', 'yyy3', 'zzz3', 3);insert into e_3 values('xxx4', 'yyy4', 'zzz4', 0);insert into e_3 values('ttt1', 'mmm1', 'nnn1', 1);insert into e_3 values('ttt2', 'mmm2', 'nnn2', 2);insert into e_3 values('ttt3', 'mmm3', 'nnn3', 3);insert into e_3 values('ttt4', 'mmm4', 'nnn4', 0);SQL> select onecode, twocode, threecode, item, id "位置"
2 from (
3 select t1.onecode, t2.twocode, t3.threecode, t3.item, rownum id
4 from e_1 t1, e_2 t2, e_3 t3
5 where t1.onecode = t2.onecode and t2.twocode = t3.twocode )
6 where item = 0
7 /ONECODE TWOCODE THREECODE ITEM 位置
-------------------- -------------------- -------------------- --------- ---------
ttt4 mmm4 nnn4 0 4
xxx4 yyy4 zzz4 0 8SQL>
select 第一分类code, 第二分类code, 第三分类code, 选项个数, rownum 位置
from (
select t1.第一分类code, t2.第二分类code, t3.第三分类code, t3.选项个数
from t1, t2, t3
where t1.第一分类code = t2.第一分类code and t2.第二分类code = t3.第二分类code )
where 选项个数 = 0
select h.* from (select c.*,rownum r from 表3 c) h
where 选项个数=0 order by 第三分类code
这样会把所有数据全部取出,我需要把关联的取出,而关联后无法排序,这样rownum就错乱了。TO:Eric_1999(╙@^@╜)
select 第一分类code, 第二分类code, 第三分类code, 选项个数, rownum 位置
from (
select t1.第一分类code, t2.第二分类code, t3.第三分类code, t3.选项个数
from t1, t2, t3
where t1.第一分类code = t2.第一分类code and t2.第二分类code = t3.第二分类code )
where 选项个数 = 0
你这样是取得关联数据后再取得rownum,这样就错了。
-------------------------------------------------------------------------------
不是所有数据的位置,也不是选项个数 = 0时的位置,而是关联后数据的位置,最后取得选项个数 = 0那部分数据。
不知道有没有可能通过SEQUENCE方法实现.