Я работаю над небольшим проектом, в котором мне нужно будет выбрать запись из временной таблицы на основе фактического номера строки записи.Как выбрать строку на основе номера строки?
Как выбрать запись на основе номера строки?
Я работаю над небольшим проектом, в котором мне нужно будет выбрать запись из временной таблицы на основе фактического номера строки записи.Как выбрать строку на основе номера строки?
Как выбрать запись на основе номера строки?
Несколько других ответов коснулись проблемы, но это могло бы объяснить. На самом деле не существует порядка, подразумеваемого в SQL (теория множеств). Таким образом, чтобы обратиться к «пятой строке» требует, чтобы ввести понятие
Select *
From
(
Select
Row_Number() Over (Order By SomeField) As RowNum
, *
From TheTable
) t2
Where RowNum = 5
В подзапросе, номер строки «создан», определив порядок вы ожидаете. Теперь внешний запрос способен вытащить пятый элемент из этого упорядоченного набора.
Что вы ищете, это функция row_number()
, как указано в комментариях к Kaf.
Вот пример:
WITH MyCte AS
(
SELECT employee_id,
RowNum = row_number() OVER (order by employee_id)
FROM V_EMPLOYEE
ORDER BY Employee_ID
)
SELECT employee_id
FROM MyCte
WHERE RowNum > 0
Технически SQL Строка не имеет "RowNumbers" в своих таблицах. Некоторые реализации (я думаю, Oracle) предоставляют один из своих, но это не стандарт, а SQL Server/T-SQL этого не делает. Вы можете добавить его в таблицу (вид) с столбцом IDENTITY.
Или вы можете добавить одно (для реального) в запрос с помощью функции ROW_NUMBER(), но если вы не укажете свой собственный уникальный ORDER для строк, ROW_NUMBERS будут назначены недетерминированно.
Возможно, вы ссылаетесь на Oracle ROWID, который не является номером строки, а физическим адресом строки. –
@a_horse_with_no_name Правильно, вот и все. – RBarryYoung
При использовании SQL Server 2012 теперь вы можете использовать смещение/выборки:
declare @rowIndexToFetch int
set @rowIndexToFetch = 0
select
*
from
dbo.EntityA ea
order by
ea.Id
offset @rowIndexToFetch rows
fetch next 1 rows only
Или вы можете просто использовать команду sequence и создать столбец уникальных чисел. –
Есть 3 способа сделать это.
Предположим, у вас есть стол сотрудника с колонками как emp_id
,, salary
. Вам нужны 10 лучших сотрудников, у которых самая высокая зарплата.
Использование row_number()
аналитической функции
Select * from
(select emp_id,emp_name,row_number() over (order by salary desc) rank
from employee)
where rank<=10
Использование rank()
аналитической функции
Select * from
(select emp_id,emp_name,rank() over (order by salary desc) rank
from employee)
where rank<=10
Использование rownum
select * from
(select * from employee order by salary desc)
where rownum<=10;
Вы использовали Google для функции '' row_number() в sql? Какова версия вашего SQL-сервера? – Kaf
Фактически записи в таблицах не имеют чисел. Пока вы не установите 'ORDER BY' в нумерации строк запроса, это не применимо. –
Если вы используете SQL 2012, используйте команду sequence в столбце. Поверьте мне, это спасатель жизни. –