2010-09-16 6 views
1

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

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 

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

ответ

2

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 
    ) 
+0

Это сделало трюк, спасибо! –

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

  • Нет связанных вопросов^_^