ФУНКЦИЯ ВЕДУЩИХ В ТРЕХ РЯДАХ ORACLE PL SQL - PullRequest
2 голосов
/ 04 февраля 2020

Моя таблица:

ID  NAME
1   SIVA
2   RAJA
3   PYTHON
4   SQL
5   ODI

Мне нужно вести по 3 ряда.

Мой SQL Запрос:

SELECT LEAD(NAME,3) OVER (ORDER by NAME) as NAME FROM TEST_TABLE where NAME='SIVA' 

Ожидаемый результат:

--------
| NAME |
--------
| SQL  |
--------

Пример:

Если я передаю значение как SIVA, тогда мне нужно получить SQL в качестве вывода.

Аналогично, если я передаю значение как раджу, тогда мне нужно получить ODI в качестве вывода

Есть ли запрос для получения ожидаемого результата?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

Это может быть один вариант: он использует функцию row_number analyti c, которая вычисляет номера строк , чтобы вам не приходилось полагаться на значения идентификатора. Что если они приобретены последовательностью? Это не без пробелов. В основном - это используется для безопасности .

SQL> WITH test (id, name)
  2       AS (SELECT 1, 'siva' FROM DUAL
  3           UNION ALL
  4           SELECT 2, 'raja' FROM DUAL
  5           UNION ALL
  6           SELECT 3, 'python' FROM DUAL
  7           UNION ALL
  8           SELECT 4, 'sql' FROM DUAL
  9           UNION ALL
 10           SELECT 5, 'odi' FROM DUAL),
 11       temp AS (SELECT id, name, ROW_NUMBER () OVER (ORDER BY id) rn FROM test)
 12  SELECT b.name
 13    FROM temp a JOIN temp b ON b.rn = a.rn + 3
 14   WHERE a.name = '&name';
Enter value for name: siva

NAME
------
sql

SQL> /
Enter value for name: raja

NAME
------
odi

SQL> /
Enter value for name: sql

no rows selected

SQL>
2 голосов
/ 04 февраля 2020

Вы можете просто использовать подзапрос:

SELECT Next_NAME 
FROM (SELECT NAME, LEAD(NAME, 3) OVER (ORDER by id) AS Next_NAME 
      FROM TEST_TABLE
     ) t
WHERE NAME = 'SIVA';
...