Besoin d'une requete pour mettre à jour champs d'une table avec valeur du meme champ de cette table d'autres enregistrements (apparier enreg. avec auto-jointure ?)
Contexte :
J'ai une table d'écritures comptable ( ""mcd"" vieux et non conforme , sans clés primaire, etrangere avec des "pseudo clé géré via le code)
Sgbd : SQLServer 2012 (pour mon environnement de test)
Objectif/problematique :
Mettre à jour le champ séquence de chaque enregistrement d'une liste donnée et identifiée à partir de la valeur du meme champs séquence d'un enregistrement correspondant de la meme table.
En gros j'ai des ecriture de tva qui ont un mauvais numero de sequence et que je desire remplacer par le bon numero de séquence a savoir celui d'une ecriture de compte fournisseur correspondant
L'idée est donc d'apparier 2 enregistrements pour recuperer le numero de sequence adequat et mettre à jour les ecriture de tva (compte commencant par 44566 , ces écritures sont celles qui sont clairement identifiés avec la valeur TVAD dans le champs
Je vous donne un exemple de ce cas de figure .
On a donc une liste d'ecriture de tva qui ont un mauvais numéro de sequence.
(Je n'ai pas reproduit ici tous les champs de la table mais ceux qui me permettent d'identifier et "lier", "apparier" les enregistrements)
J'ai mis les nom de champs de la table pour comprendre les ordres SQL et aussi au dessus un nom plus litteral plus descriptif
Table HISCOM avec exemple d'ecritures de tva :
Pour chacun de ces enregistrement on peut retrouver un enregistrement correspondant sur un compte fournisseur avec des valeurs identiques pour les champs CodeCompagnie , Numero de piece , date de mouvement, Code journal
De plus on est sûr que cet enregistrement correspondant a comme type de compte 06 Ou qu'il commence par 401 (cela revient au même)
Meme table HISCOM avec exemples d'ecriture fournisseur
L'objectif est donc de venir remplacer la sequence 07003475 de l'ecriture de tva de la piece 305080 par la sequence 11115856 de l'ecriture fournisseur 401TOTO pour la meme piece 305080 et ce pour toutes les ecritures de tva (qu'on peut retrouver facilement par la valeur TVAD du champs CodeGroupe).
Tests/Essai
Dans un premier temps reussir a faire un select adequat pour afficher cote a cote les ecritures de tva et a droite la sequence issue de la recherche afin de verifier l'exactitude de la requete par sondage
En qqs sorte je voudrais afficher une table resultat de ce type (avec l'alias de table HFOU)
Je suis parti sur des auto jointures mais cela me ramene trop d'enregistrement car mes where porte surement la table virtuelle issus de la jointure et non la clause on elle-même (cf https://conseilit.wordpress.com/2010...dans-le-where/ )
Je suis donc passé de
à
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT HTVA.HIKTSOC,HTVA.HIKTCPT,HTVA.HIKJDMVT,HTVA.HICTCJ,HTVA.HICTPIE,HTVA.HICTTYP,HTVA.HICTSEQ,HTVA.HICTGROUPE, HFOUR.* FROM HISCOM HTVA LEFT OUTER JOIN HISCOM HFOUR ON (HTVA.HIKTSOC=HFOUR.HIKTSOC AND HTVA.HICTPIE=HFOUR.HICTPIE AND HTVA.HIKJDMVT=HFOUR.HIKJDMVT AND HTVA.HICTCJ=HFOUR.HICTCJ) WHERE HTVA.HICTGROUPE='TVAD' AND HFOUR.HICTTYP='09'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT HTVA.HIKTSOC,HTVA.HIKTCPT,HTVA.HIKJDMVT,HTVA.HICTCJ,HTVA.HICTPIE,HTVA.HICTTYP,HTVA.HICTSEQ,HTVA.HICTGROUPE, HFOUR.* FROM HISCOM HTVA LEFT OUTER JOIN HISCOM HFOUR ON (HTVA.HIKTSOC=HFOUR.HIKTSOC AND HTVA.HICTPIE=HFOUR.HICTPIE AND HTVA.HIKJDMVT=HFOUR.HIKJDMVT AND HTVA.HICTCJ=HFOUR.HICTCJ) AND HTVA.HICTGROUPE='TVAD' AND HFOUR.HICTTYP='09' --AND HFOUR.HICTCJ='60' AND HTVA.HICTTYP='06'
Je me demande si l'auto jointure est déjà une bonne solution de départ ?
J'ai du mal deja a apparier les enregistrement dans une vue de type select et je pense que j'aurais encore plus de mal a passer au update ensuite.
Partager