Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renvoie deux ensembles de résultats lors de l'utilisation de WITH TempResults AS

Cela ne peut pas être fait (pour autant que je sache). Il existe trois solutions de contournement, l'une qui vous permet de conserver deux ensembles de résultats distincts et les deux autres qui nécessitent de fusionner les résultats dans le même ensemble de résultats (sous forme de ligne ou de colonne supplémentaire).

  1. Au lieu d'un CTE, placez les résultats dans une table temporaire, puis interrogez-la à partir de celle-ci.
  2. Fusionnez le décompte dans le jeu de résultats réel sous la forme d'une autre ligne :utilisez un UNION ALL et donnez à la ligne de comptage des valeurs appropriées pour ID, Name et RowID afin que vous puissiez l'extraire du reste des données
  3. Ajouter le SELECT COUNT(*) dans le jeu de résultats principal en tant que colonne supplémentaire avec un CROSS JOIN ou similaire.

Pour ce dernier, vous pouvez le faire en modifiant votre requête principale en :

SELECT Id, Name, RowId, countTable.totalRows
    FROM ResultsTemp
        CROSS JOIN (SELECT COUNT(*) AS totalRows FROM ResultsTemp) AS countTable
    GROUP BY Id, Name, RowId 
    HAVING RowId BETWEEN @StartRow and (@StartRow + @MaxRows);

Je ne peux pas me porter garant de la performance - vous auriez besoin d'établir un profil.