2016-11-22 8 views
2

Я хочу выбрать фиксированный размер отдельных строк (на странице) из таблицы + количество всех строк (для каждого запроса). Существует мой запрос без подсчета всех строк:Количество различных строк в SQL

select distinct takenBookTitle, user from Books 
where user = 'username' 
order by takenBookTitle 
offset 0 rows fetch next 3 rows only 

Но с этим результатом мне нужно, чтобы получить количество всех строк (без смещения .. выборка).

Если отчетливый не надо было бы сделать с COUNT (*) OVER():

select takenBookTitle, user, count(*) OVER() AS count 
from Books 
where user = 'username' 
order by takenBookTitle offset 0 rows fetch next 3 rows only 

Результат:

BookTitle1 userName1 10 
BookTitle2 userName2 10 
BookTitle3 userName3 10 

Но я хочу, чтобы рассчитывать отчетливый строки, но кол-во () OVER() * не разрешает.

+0

Любая причина, по которой вы не использовали бы здесь два запроса: один, чтобы получить итоговый результат, а другой - для получения отдельных результатов? Кажется немного глупым, чтобы вернуть ту же информацию (общее количество отдельных строк) с каждым результатом. – smj

+0

@smj общее количество отдельных строк - это значение, которое используется на стороне клиента по моему datatable, и мне нужно вернуть это значение с каждым запросом на выбор. Теоретически я могу использовать отдельный запрос, чтобы выбрать этот счет, но в моей ситуации это не очень хорошо. – Ddd

ответ

0

Вы можете вычислить count в другом запросе с теми же ограничениями (где положение) и кросс присоединиться к нему, так как он содержит только одну строку, так и та же информация будет добавлена ​​соответственно к каждой строке:

select 
    t.*, g.cnt 
from (
    select distinct takenBookTitle, user from Books 
    where user = 'username' 
    order by user offset 0 rows fetch next 3 rows only 
) t 
cross join (
    select count(*) as cnt 
    from Books 
    where user = 'username' 
) g 

Мне интересно, почему вы заказываете user, если предложение where указано только одним, но вы можете использовать несколько пользователей для этой цели и представляете нам упрощенный запрос. Если нет, этот порядок не представляется ненужным

Смежные вопросы