2011-04-16 4 views
1

В настоящее время работает, но я хочу, чтобы xml содержал общее количество строк без ограничения.Считать общее количество строк без ограничения

SET @query_result = (SELECT ID,Title 
     FROM 
     ( 
      SELECT items.id AS "ID",items.title AS "Title" , 
ROW_NUMBER() OVER(ORDER BY date_added DESC) AS RowNum 
       FROM [cars] 
       JOIN [items] ON items.id=cars.item_id 
       WHERE 
       rejected = 0 


    )AS MyDerivedTable 
     WHERE 
     MyDerivedTable.RowNum BETWEEN (@page-1)*2+1 AND (@page*2) 
     FOR XML PATH('car'),ROOT('items') 
) 

Это возвращает

<items> 
    <car> 
    <ID>37</ID> 
    <Title>Used 2004 Chevrolet Corvette Convertible</Title> 
    </car> 
</items> 

Я хочу

<items> 
     <car> 
     <ID>37</ID> 
     <Title>Used 2004 Chevrolet Corvette Convertible</Title> 
     <Count>6</Count> 
     </car> 
    </items> 

Пока граф не количество возвращаемых строк, но общее количество строк, которые соответствовали запросу .Или, если моя проблема слишком сложно для кого-то понять, я ищу альтернативу MSSQL для FOUND_ROWS(); Этот вопрос @SQL Count total number of rows whilst using LIMIT пытается ответить на одно и то же, но я хочу, чтобы решение было MSSQL.

+0

Если в таблице было 6 элементов, этот запрос возвращает 2 из них, пока я хочу эту вещь, но вместе с общим количеством строк как 6 в качестве элемента XML. – pcraft

+0

Я стараюсь быть таким же ясным. Таблицы «соединены». Меня интересует только общее количество строк, соответствующих «целым» запросам/запросам, а не количеству возвращаемых строк. – pcraft

+0

@FreeAsInBeer Нет, они не то же самое. Всего строк: 6; Возвращенные строки: 2. Такие как пейджинг. – pcraft

ответ

2

ОК, надеюсь, теперь я понимаю, что вы пытаетесь сделать. Я считаю, что вам нужно «обойти» свой выбор и использовать CTE (Common Table Expression) вместо подзапроса для этого.

Попробуйте это:

DECLARE @queryResult VARCHAR(MAX) 

;WITH MyDerivedTable AS 
(
    SELECT 
     items.id, 
     items.title, 
     ROW_NUMBER() OVER(ORDER BY date_added DESC) AS RowNum 
    FROM dbo.cars 
    INNER JOIN dbo.items ON items.id = cars.item_id 
    WHERE rejected = 0 
) 
SELECT 
    @queryResult = 
    (SELECT 
     ID, Title, 
     (SELECT MAX(RowNum) FROM MyDerivedTable) AS 'Count' 
    FROM 
     MyDerivedTable 
    WHERE 
     RowNum BETWEEN (@page-1)*2+1 AND (@page*2) 
    FOR XML PATH('car'),ROOT('items') 
    ) 

SELECT @queryResult 

Это должен вывести ваш ID, Title и Count (что максимальное из RowNum) для каждой записи автомобиля.

+0

Спасибо. Он работал – pcraft

+0

Как сохранить результат этого в @query_result nvarchar (max) – pcraft

+1

@pcraft: обновил мой ответ, чтобы показать, как это сделать –

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