Как я могу получить записи из таблицы в PL / SQL? - PullRequest
1 голос
/ 10 января 2010

У меня есть одна таблица: Вопросник. в нем хранятся DisciplineId, QuestionId, QuestionText и т. д ...

Теперь мой вопрос:

Мне нужно 10 записей определенного DisciplineId, 20 записей для другого DisciplineId и 30 записей для Someother DisciplineId .... Что мне для этого нужно сделать? Как я могу объединить все выписки и получить только 60 (10 + 20 + 30) выбранных строк?

Для одной дисциплины она работает, как показано ниже:

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);

1 Ответ

2 голосов
/ 10 января 2010

Следующий запрос использует аналитическую функцию RANK() для сортировки вопросов в рамках дисциплины. Затем внешний запрос выбирает первые десять, первые двадцать и первые тридцать вопросов для дисциплин 1, 2 и 3 соответственно.

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 )
/
...