1

テーブルが 1 つあります: Questionmaster です。DisciplineId、QuestionId、QuestionTextなどを保存します...

今私の質問は:

特定の DisciplineId の 10 レコード、別の DisciplineId の 20 レコード、および Someother DisciplineId の 30 レコードが必要です....どうすればよいですか? すべてのステートメントをクラブにして、60 (10 + 20 + 30) 行だけを選択するにはどうすればよいですか?

1つの分野では、以下に示すように機能しています:

create or replace function fun_trial(Discipline1,Disc1_NoOfQuestions)
 open cur_out for 
  select getguid() tmp,
  QuestionNo,QuestionText,
  Option1,Option2,
  Option3,Option4,
  Correctanswer,Disciplineid
  from  Questionmaster
  where DisciplineId=discipline1
  AND  rownum <= disc1_NoOfQuestions
   order by tmp ;
return (cur_out);
4

1 に答える 1

2

次のクエリでは、analytic 関数RANK()を使用して、分野内で質問を並べ替えます。次に、外側のクエリは、分野 1、2、および 3 の最初の 10 個、最初の 20 個、および最初の 30 個の質問をそれぞれ選択します。

select * from (
  select getguid() tmp
         , QuestionNo
         , QuestionText
         , Option1
         , Option2
         , Option3
         , Option4
         , Correctanswer
         , Disciplineid
         , rank () over (partition by Disciplineid order by QuestionNo ) as rn 
  from  Questionmaster
  where DisciplineId in (1, 2, 3)
)
where ( DisciplineId = 1 and rn <= 10 )
or    ( DisciplineId = 2 and rn <= 20 )
or    ( DisciplineId = 3 and rn <= 30 )
/
于 2010-01-10T05:41:21.060 に答える