Отправить общее количество строк / последний ряд, включенный в набор результатов - PullRequest
1 голос
/ 16 сентября 2010

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

USE [some_name]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[GetFilteredProductDetails]
    @start int,
    @end int
AS
BEGIN
    SET NOCOUNT ON;

        SELECT *
        FROM
        (
            SELECT *, (ROW_NUMBER() OVER (ORDER BY itemid)) AS row
            /* the rest of a big complex query that, so far, works.*/
        ) AS q
        WHERE
        (           
            row BETWEEN @start AND @end
        )
END

Это мой текущий (раздетый) запрос, как бы я мог получить либо последнее число строк / общее количество строк внутреннего выбора, либо включить последнюю строку рядом со строками между @start и @end.

1 Ответ

2 голосов
/ 16 сентября 2010

COUNT(*) с пустым предложением OVER() даст вам общее количество строк.Затем вы можете добавить это в предложение WHERE, если вам нужна последняя возвращенная строка.

SELECT *
FROM
(
    SELECT *, 
    (ROW_NUMBER() OVER (ORDER BY itemid)) AS row,
    COUNT(*) OVER() AS row_count
    /* the rest of a big complex query that, so far, works.*/
) AS q
 WHERE
    (           
        row BETWEEN @start AND @end or row=row_count
    )
...