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>

Count は返される行数ではなく、クエリに一致した行の総数です。または、私の問題が難しすぎて誰にも理解できない場合は、FOUND_ROWS(); の MSSQL 代替を探しています。この質問 @ SQL Count total number of rows while using LIMITは同じことに答えようとしていますが、解決策は MSSQL です。

4

1 に答える 1

2

OK、あなたが何をしようとしているのか理解できたと思います。これを実現するには、選択を「方向転換」し、副選択の代わりに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

これにより、各車のエントリの、、および(の最大値)IDTitle出力Countされます。RowNum

于 2011-04-16T12:23:34.833 に答える