2011-04-16 61 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> 

雖然計數不是行返回的數字,但與查詢匹配。或者,如果我的問題是行的總數任何人都難以理解,我正在尋找FOUND_ROWS()的MSSQL替代方案; 這個問題@SQL Count total number of rows whilst using LIMIT正試圖回答同樣的問題,但我想要的解決方案是MSSQL。

+0

如果表中有6個項目,此查詢返回其中的2個,而我想要這個東西,但連同總數爲6的行作爲XML元素。 – pcraft 2011-04-16 12:09:20

+0

我想盡可能清楚。表格是「加入」。我只關心匹配「整個」查詢/查詢的總行數,而不是返回的行數。 – pcraft 2011-04-16 12:15:13

+0

@FreeAsInBeer不,他們不一樣。總行數:6;返回行數:2。它像尋呼。 – pcraft 2011-04-16 12:19:30

回答

2

好吧,我希望我現在明白你想要做什麼。我相信你必須「扭轉」你的選擇,並使用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 

應該輸出你的IDTitleCount(這是RowNum的最大值)每節車廂的條目。

+0

謝謝。它的工作 – pcraft 2011-04-16 12:25:42

+0

如何將此結果存儲到@query_result nvarchar(max) – pcraft 2011-04-16 12:39:32

+1

@pcraft:更新了我的答案以顯示如何做到這一點 – 2011-04-16 12:43:07