Подсчитайте записи в таблице и покажите номер строки определенного значения

#sql #tsql

#sql #tsql

Вопрос:

Я ищу, чтобы найти позицию значения в результирующем наборе И общее количество результатов в этом наборе.

В приведенном ниже примере ID-101 является частью набора из 3 записей и находится в позиции # 2 в этом наборе.

tblData

 ID     Type  Order   
100    P     1       
101    P     2       
102    P     3       
  

Результат

 cntRec    intPos
3         2
  

Пример #2
В приведенном ниже примере ID-101 является частью набора из 3 записей, порядок которых изменен (пользователем) и находится в позиции # 1 в этом наборе.

tblData

 ID     Type  Order   
100    P     3       
101    P     1       
102    P     2       
  

Результат

 cntRec    intPos
3         1
  

Ответ №1:

Пожалуйста, найдите запрос с помощью функции window:

 DECLARE @intPos AS INT = 0;

;WITH RowCountCte AS (
   SELECT ID, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS intPos
   FROM tblData
)

SELECT @intPos = intPos FROM RowCountCte WHERE ID = 101;

SELECT COUNT(ID) AS cntRec, @intPos AS intPos
FROM tblData;
  

Демонстрация в db<>fiddle

Комментарии:

1. Спасибо — в вашем примере значения intPos должны быть ‘2’, а не ‘3’ — из-за столбца order ?

2. @BigIWT Так intPos это не позиция 101 в таблице? Это просто значение столбца 101 Order ?

3. Согласно вашему комментарию, вы ожидаете этот запрос ?

Ответ №2:

Это то, что вы хотите?

 select count(*) as cntrec,
       sum(case when id <= 101 then 1 else 0 end) as intpos
from t;
  

Комментарии:

1. спасибо — да, но я виноват, так как забыл упомянуть поле «порядок» — исходный вопрос обновлен.