|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
* Bonjour, *
j'ai deux colonnes dans ma table. Une "montant" et l'autre "modification". Je cherche à calculer le nouveau montant en fonction de la modification. Comment pourrais je faire ca ? * Merci * |
|
|
00
|
|
|
#2 |
![]() ![]() |
Tu ne donnes pas assez d'infos pour qu'on puisse t'aider efficacement.
http://www.developpez.net/forums/a69...gage-sql-lire/
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() |
Bonsoir,
Ca pourrait ressembler à ça: Code :
__________________
www.nudge.org Surveillez et optimisez vos applications Java |
||
|
|
00
|
|
|
#4 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
Bonjour, voila ma table :
Code :
Merci de l'aide, ca à l'air assez complexe... |
||
|
|
00
|
|
|
#5 |
![]() ![]() |
Et ton 22 doit aller où ? Sur la ligne 3 ?
Tu ne serais pas en train de vouloir utiliser un SGBD comme un tableur toi ? Que représentent ces OldNumber et NewNumber ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 637 ![]() |
qu'est-ce qui détermine votre "suivant" ?
Quand vous dites insérer le resultat dans oldNumber c'est quelle ligne ? Ensuite vous dites "puis additionner le NewNumber", on l'additionne avec quoi ? Vous ne pouvez pas développer votre schéma avec les résultats des étapes pour qu'on comprenne l'algo utilisé ? |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
le but se serait de remplacer le 0 de la ligne 3 avec 22 et aditioner 22 à -1 et dans la ligne 4 on aurait 21 en oldNumber
|
|
|
00
|
|
|
#8 |
![]() ![]() |
Je souscris à ce que dit Punkoff.
Donne nous la nature du besoin et le processus qui te conduisent à cette structure de données. J'ai notamment du mal à comprendre d'où viennent les deux premiers OldNumber si le troisième doit être l'addition des deux premiers NewNumber et que, si j'ai bien compris, le OldNumber de la ligne 5 sera l'addition du OldNumber et du NewNumber de la ligne 4.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#9 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
En fait on a du enlever des row et les "oldNumber" sont donc faux. Pour etre concret se sont des quantités de stock avec variations.
On m'a dit qu'un curseur pour faire l'affaire mais n'ayant jamais employé ca je ne vois pas bien... |
|
|
00
|
|
|
#10 |
![]() ![]() |
N'ayant moi non plus jamais utilisé de curseur, je ne vais pas pouvoir t'aider sur ce sujet.
Je vos par contre chez SQLPro un article qui dit de les éviter. Mais peut-être pourrais-tu aussi regarder du côté des requêtes récursives. Ça dépend bien sûr de ce que ton SGBD est capable de faire. MySQL ne connaît pas les requêtes récursives. Ta demande concerne t-elle la mise à jour de la table ou l'insertion de nouvelles données ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#11 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 637 ![]() |
Perso j'ai toujours pas compris l'algo.
Là c'est bien joli, mais je suppose que tu as des centaines de lignes a updater, et on ne sais toujours pas comment on sélectionne les données de départ (quels criteres ??) et pour updater quelle donnée (quels criteres ??), et non plus comment on continu nos sélection. Un curseur te permettra de traiter d'une manière séquentielle ton problème. La requete sql va te faire un traitement global. On a plein de prog qui tourne avec des curseur (en cobol) et aucun problème avec. |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
bonjour
c'est vrai qu'il est difficile de comprendre précisément ton besoin, mais a première vue je pense que tu pourra te passer d'un trigger. Avec un trigger, tu traitera ligne par ligne, alors que les SGBD sont optimisés pour travailler sur des ensembles. explique nous plus précisément la logique, et on pourra te proposer des solutions |
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
En fait il faut toujours commencer depuis la 1ère ligne et depuis la colonne NewNumber puisque je remplis précédemment cette table avec les lignes désirées. Dans un 1er temps il ne faut pas prendre en compte la colonne old puisque ces chiffres sont faux.
Je vais reprendre un exemple en ne montrant que les colonnes chiffres. Admettons que dans ma table j'ai ca : Le but se serait de transformer ca en Ca veut dire qu'il faut faire 4 + 6 de la colonne new et update le 6 en 10. Puis comme il y a -4 il faut faire 10 - 4 et update le -4 en 6 qui sera le new de la ligne 3. |
|
|
00
|
|
|
#14 | |||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 637 ![]() |
comment détermine-t-on la 1ere "ligne" ? et comment détermine-t-on la ligne a updater ?
la notion de 1ere ligne, 2eme ligne n'a pas de sens dans un sgbd, car une "ligne" physique peut être placée en plein milieu d'une table alors que selon certain critere ce sera la "1ere ligne". donc si dans votre table vous avez par exemple ces enregistrements : Citation:
Citation:
Maintenant si la table physique est organiser différemment la 1ere ligne pourra être le couple (3, piotrec) !! Il en va de même pour la notion de 2eme ligne. Sinon j'ai compris le process d'update avec vos dernières explication edit: Citation:
En effet il faudra d'abord construire votre résultat via une requête récursive (CTE) je penses, et faire un update à partir de là. A moins que votre SGBD gère les CTE sur un update. Donc ne pouvons pas faire en un coup tout ce système ? il faudrait que l'on puisse partir des données de base afin de créer une structure temporaire final, et ceci sans passer par votre table temporaire qui ne travaille que sur peu de donnée. sinon voici un exemple de requête récursive pour votre select : Code :
|
|||||
|
|
00
|
|
|
#15 |
![]() ![]() |
Quel est votre SGBD ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#16 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
hello, alors j'utilise MS SQLSERVER. Merci pour votre solution mais j'ai une erreur avec le "WITH". Est-ce que c'est compatible avec mon sgbd ?
|
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
les CTE (WITH) sont compatibles depuis SQL Server 2005
quelle est votre version ? |
|
|
00
|
|
|
#18 |
|
Candidat au titre de Membre du Club
![]() Inscription : février 2005 Messages : 114 ![]() |
je sais pas exactement ce qui est sur le serveur mais ca doit etre un problème de syntaxe plutot que de compatibilité en fait.
Mais pour en revenir à sa solution, quand je vois cette ligne Si les id ne se suivent pas régulièrement ca ne marche donc pas. Il faut que je puisse lui dire de prendre la ligne suivante |
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
s'il y a des "trous" dans les indices, utilisez row_number() over(order by id), et servez vous de cela pour votre jointure
|
|
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 637 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com