2016-05-22 10 views
0

現在、私はscheduleという名前のテーブルをdb(SQL開発者)に持っています。SQLデベロッパー(oracle 11g)で照会結果を整理する

とすると、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を使用して、これらの値をソートしています。 しかし、私はこのような何かに再びそれらを整理したいと思います:それは次のavailableIDに進み、その後4回呼び出されます、すべてのavailableIDについては

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 

。次に、最も低いIDに戻りますが、別の値を使用します。 Studは別個のものでなければなりません。

これを達成するには、sqlクエリを使用できますか?

答えて

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 
+0

こんにちは、お時間をありがとうございました。 2番目の選択クエリで、表示するすべての列を追加する必要がありますか? – user6308605

+0

ですから私はあなたの質問を試みました。それは働いている!大変ありがとうございました! – user6308605

+0

私は質問があります... 'availableID'と' availableDate'を使って並べ替えるにはどうすればいいですか? – user6308605

1

A上記のように、わずかに他の同等のアプローチ、床やパーティショニングを使用して、同じ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 

+0

こんにちはありがとう!それもうまくいっています。私はあなたの答えを投票することができます:D – user6308605

+0

助けて嬉しい:) – SubhasisM

関連する問題