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).
- Au lieu d'un CTE, placez les résultats dans une table temporaire, puis interrogez-la à partir de celle-ci.
- 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 - Ajouter le
SELECT COUNT(*)
dans le jeu de résultats principal en tant que colonne supplémentaire avec unCROSS 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.