#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;
Комментарии:
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. спасибо — да, но я виноват, так как забыл упомянуть поле «порядок» — исходный вопрос обновлен.