SQL Server 2005 - Counter dans une requête sélectionnée
-
14-11-2019 - |
Question
Je voudrais avoir un compteur de ligne dans la requête sélectionnée de ma procédure stockée, mais le compteur ne serait pas incrémenté pour chaque ligne. L'incrémentation dépendrait de la valeur de l'un des champs. Quelque chose d'équivalent à ce code invalide:
DECLARE @RowIndex as int
SET @RowIndex = 0
SELECT
f1, f2, f3,
CASE
WHEN f1 > 3 THEN @RowIndex += 1
ELSE @RowIndex
END AS MyIndex
FROM
MyTable
Comment dois-je faire cela dans SQL Server 2005?
La solution
Pour ce faire dans une seule requête, vous devrez rejoindre la table à elle-même pour obtenir le numéro ou les lignes précédentes qui répondent à vos critères. De plus, vous avez certainement besoin d'une colonne qui commande la table. Dans ce cas, appelons cette colonne F2.
SELECT a.f1, a.f2, a.f3
, SUM(CASE WHEN b.f1 > 3 THEN 1 ELSE 0 END) AS MyIndex
FROM MyTable a
JOIN MyTable b
ON a.f2 >= b.f2
GROUP BY a.f1, a.f2, a.f3
Autres conseils
SELECT f1,f2,f3, DENSE_RANK() OVER (ORDER BY tempf1)-1 AS myIndex
FROM
(
SELECT f1, f2, f3, CASE WHEN f1>3 THEN f1 ELSE 0 END AS tempf1
FROM
MyTable
) AS A
Veuillez utiliser dense_rank () avec l'ordre par F1 comme ci-dessus. Essaye ça.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow