Индексация строк в MS SQL

Можно ли как-то проиндексировать строки в запросе, чтобы выбрать нужную? Я попытался сделать это через функцию ROW_NUMBER(), но дело в том, что это оконная функция.

SELECT 
ROW_NUMBER() OVER(ORDER BY Client_ID), Client_ID FROM Apartments_and_clients 
WHERE Apartment_ID = 1

Я попробовал сделать по-другому:

SELECT 
ROW_NUMBER() OVER(ORDER BY Client_ID), Client_ID FROM Apartments_and_clients 
WHERE Apartment_ID = 1 AND (SELECT 
ROW_NUMBER() OVER(ORDER BY Client_ID), Client_ID FROM Apartments_and_clients 
WHERE Apartment_ID = 1) = 2

но дело в том, что запрос возвращает больше 1 результата.


Ответы (1 шт):

Автор решения: Nick Proskuryakov

Я думаю вам поможет CTE

;WITH CTE
AS (
   SELECT
         ROW_NUMBER() OVER ( ORDER BY Client_ID ) AS rn,
         Client_ID
   FROM  Apartments_and_clients
   WHERE Apartment_ID = 1
   )
SELECT
      CTE.rn,
      CTE.Client_ID
FROM  CTE
WHERE CTE.rn = 1;
→ Ссылка