Итак, я пытаюсь добавить в переменную значение rownum, но мне нужно, чтобы оно давало мне только одно значение, поэтому 2, если это второе число в строке - PullRequest
0 голосов
/ 12 декабря 2018
   select rownum into v_rownum
    from waitlist
    where p_callnum=callnum
        order by sysdate;

попытался сделать это, но выдает слишком много значений.

, и если я сделаю p_snum=snum, он будет возвращать 1. Мне нужно, чтобы он возвращал 2, если это # ​​2 в списке ожидания.

 select rn into v_rownum
from (select callnum, 
    row_number() over (order by sysdate) rn
    from waitlist)
where p_snum=snum;

Почти получил его на работу.Встречаясь с проблемами в первом выборе.Я полагаю, что вместо этого я мог бы использовать v_count.Также упорядочение по Sysdate, даже если секунда друг от друга будет правильно упорядочить его.

    SNU    CALLNUM TIME
--- ---------- ---------
101      10125 11-DEC-18
103      10125 11-DEC-18

Кстати, время = дата, когда я вводил людей в список ожидания, используя sysdate.Поэтому я предполагаю, что упорядочение по времени может сработать.

создать список ожидания таблицы (snum varchar2 (3), номер callnum (8), дата времени, ограничение fk_waitlist_snum, внешний ключ (snum) ссылается на студентов (snum), ограничение fk_waitlist_callnum Foreignkey (callnum) ссылается на schclasses (callnum), первичный ключ (snum, callnum));

- таблица списка ожидания.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я использовал таблицу Скотта DEPT, чтобы создать WAITLIST;номера отделов представляют CALLNUM столбец:

SQL> select * From waitlist;

   CALLNUM WAITER
---------- --------------------
        10 ACCOUNTING
        20 RESEARCH
        30 SALES
        40 OPERATIONS

Как получить нужные данные?

  • с использованием аналитической функции (ROW_NUMBER), которая упорядочивает значения на CALLNUM с,вы будете знать порядок
  • , в котором этот запрос будет использоваться как встроенное представление для запроса main , который возвращает число в списке ожидания для любого CALLNUM

Вот как:

SQL> select rn
  2  from (select callnum,
  3               row_number() over (order by callnum) rn
  4        from waitlist
  5       )
  6  where callnum = 30;

        RN
----------
         3

SQL>
0 голосов
/ 12 декабря 2018

rownum в oracle - это сгенерированный столбец, он не относится к какой-либо конкретной строке, это просто n-я строка в наборе.

С помощью выбора в него может быть возвращена только одна строка (отсюда и ошибка в двух многих строках), поэтому rownum всегда будет равен 1.

Без подробностей о структуре таблицы и о том, как вы уникальныидентификация записей трудно дать вам помощь в решении проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...