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?

Était-ce utile?

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
scroll top