curseur de mettre à jour une ligne avec les valeurs de la précédente et actuelle des lignes

Collègues Requête Écrivains,

J'ai un tableau comme suit:

myTable t1
col2 col3
 2    1
 3    0
 4    0
 5    0
 6    0

et je veux mettre à jour chaque zéro sur col3 avec la valeur de col3 dans la rangée précédente, majorée de la valeur de col2 de la ligne actuelle. Donc ma table de comme suit:

myTable t1
col2 col3
 2    1 
 3    4  (1+3)
 4    8  (4+4)
 5    13 (5+8) 
 6    19 (6+13)

Je suis absent la logique ici, la myopie peut-être. J'ai essayé avec un curseur comme suit:

DECLARE @var3 FLOAT

DECLARE cursor3 CURSOR FOR
SELECT col2, col3 FROM table1
FOR UPDATE OF col3
OPEN cursor3


FETCH FIRST FROM cursor3
WHILE (@@FETCH_STATUS > -1)
BEGIN
 UPDATE @table1
 SET col3 = isnull(@var3, 0) + isnull(col2, 0)
 WHERE CURRENT OF cursor3
 FETCH NEXT FROM cursor3 INTO @var3
END

mais c'est faux.
Des idées?

Merci d'avance.

  • Avez-vous une autre colonne, comme une colonne d'ID sur la table? les curseurs sont presque jamais une bonne idée...
  • D'autres colonnes, mais pas de Clé Primaire. C'est une table temporaire pour générer des rapports. Je suis assez convaincu que les curseurs existent pour ce type de problèmes.
  • Les curseurs existent pour ce type de problèmes, mais cela ne veut pas dire qu'ils sont le meilleur/le plus approprié. Si vous ajoutez une colonne d'identité à votre table temp c'est environ la 10000x plus facile.
  • Si j'ajoute une colonne d'Identité, comment pourrais-je résoudre le problème, alors?
  • Je suis en train d'écrire la requête, donnez-moi une minute 🙂
  • faire de votre temps.
  • MMMMMMMMMMMMMMM peut-être pas, puisque vous souhaitez utiliser la mise à jour de la valeur pour calculer la ligne suivante.
  • Oh que oui! Leçon du jour: ne jamais dénigrer les curseurs de nouveau. Écrire sur le tableau noir 100 fois. Merci quand même! 🙂
  • Mensonges, je l'ai eu. Vérifier la réponse ci-dessous! 🙂

InformationsquelleAutor Lynx Kepler | 2010-11-03