Подсчитать общее количество строк без ограничения - PullRequest
1 голос
/ 16 апреля 2011

В настоящее время работает, но я хочу, чтобы 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>

Хотя Count - это не количество возвращаемых строк, а общее количество строк, соответствующих запросу. Или, если моя проблема слишком сложна для понимания, я ищу альтернативу MSSQL для FOUND_ROWS ();Этот вопрос @ Общее количество строк SQL, в то время как LIMIT пытается ответить на то же самое, но я хочу, чтобы решение было MSSQL.

1 Ответ

2 голосов
/ 16 апреля 2011

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

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

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) для каждой записи автомобиля.

...