在sql developer中组织查询结果(oracle 11g)

时间:2016-05-22 01:21:35

标签: java sql oracle subquery

目前我在db(SQL开发人员)中有一个名为schedule的表。

假设availableID是1,3,7,8。该表包含以下内容:

Stud        Title   Supervisor  Examiner    availableID    
abc         Hello     1024       1001           1
def         Hi        1024       1001           1
ghi         Hey       1002       1004           1 
xxx         hhh       1020       1011           1
jkl         hhh       1027       1010           1
try         ttt       1001       1011           1
654         bbb       1007       1012           1
gyg         888       1027       1051           1
yyi         333       1004       1022           3
fff         111       1027       1041           3
ggg         222       1032       1007           3
hhh         444       1007       1001           3
ppp         444       1005       1072           7
ooo         555       1067       1009           7
uuu         666       1030       1010           7
yyy         777       1004       1001           7
qqq         yhh       1015       1072           8
www         767       1017       1029           8
eee         566       1030       1020           8
rrr         888       1004       1031           8
abc         5555      1045       1051           8

如您所见,我使用ORDER BY availableID asc对这些值进行排序。 但是,我想再次将它们组织成这样的东西:

    Stud        Title   Supervisor  Examiner    availableID    
    abc         Hello     1024       1001           1
    def         Hi        1024       1001           1
    ghi         Hey       1002       1004           1 
    xxx         hhh       1020       1011           1
    yyi         333       1004       1022           3
    fff         111       1027       1041           3
    ggg         222       1032       1007           3
    hhh         444       1007       1001           3
    ppp         444       1005       1072           7
    ooo         555       1067       1009           7
    uuu         666       1030       1010           7
    yyy         777       1004       1001           7
    qqq         yhh       1015       1072           8
    www         767       1017       1029           8
    eee         566       1030       1020           8
    rrr         888       1004       1031           8
    jkl         hhh       1027       1010           1
    try         ttt       1001       1011           1
    654         bbb       1007       1012           1
    gyg         888       1027       1051           1
    ........
    abc         5555      1045       1051           8

对于每个availableID,它会调用四次,然后进入下一个availableID。接下来,它将迭代回最低ID,但使用不同的其他值。 Stud必须与众不同。

是否可以通过使用sql查询实现此目的?

2 个答案:

答案 0 :(得分:1)

您可以使用row_number()和一些算术执行此操作。类似的东西:

Select t.*
From (select t.*,
             Row_number() over (partition by availableid order by stud) as seqnum 
      From t
     ) t
Order by trunc((seqnum - 1) / 4), availableid

答案 1 :(得分:1)

如上所述的另一种等效方法,使用楼层和分区以及按相同的availableID列分组 -

select a.stud,
       a.title,
       a.supervisor, 
       a.examiner,
       a.availableID 
from ( select s.*,row_number() over (partition by availableID order by availableID) rn 
       from student s) a 
order by floor((rn-1)/4),availableID