Я думаю, что я нашел ошибку в SQL Server 2012. У меня есть следующий сложный запрос, который использует КТР с row_number для выполнения поискового вызова, а затем подзапрос вернуть общее число строк в одном запросе:Ошибка SQL Server 2012 CTE?
with data as (...complex query with row_number() ... as rowNumber...)
select *, (select count(*) from data) as totalRows
from data
where rowNumber between 1 and 10
Я «Я нашел в своем конкретном запросе, что если окончательный запрос возвращает 5 строк, totalRows возвращается как 8. Но есть только 5 строк. Как может totalRows быть больше, чем количество возвращенных строк? Я пробовал подсказки запросов, такие как отключение параллельных планов выполнения, но не только медленнее, но все равно не так. Могу ли я делать что-то неправильно или это ошибка? Есть ли другой способ вернуть счет в одном запросе?
Вы не подаете свой фильтр 1 до 10 против выбора COUNT (*) из данных. Если вы сделаете это как временную таблицу вместо CTE, вы можете увидеть, как CTE действительно работает. Я бы не использовал RowNumber без раздела и над предложением –