Bonjour à tous,
J'ai un petit problème sur un Update dont je n'arrive pas à me dépêtrer.
En gros, j'ai un fichier texte qui est importé dans une table. Chaque ligne de ce fichier comporte une référence de facture + une référence de moyen de paiement. Chaque référence de facture peut correspondre à plusieurs références de paiement (= 1 facture payée par M chèques) et une référence de moyen de paiement peut correspondre à plusieurs références de facture (= N factures payée par un chèque).
Après import dans la table je me retrouve donc avec quelque chose du style (simplifié pour plus de clarté) :
A partir de cela, je dois constituer des dossiers en fonction des documents qui vont ensemble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 RefFact RefMP numDossier ----------------------------- fact1 MP1 NULL fact2 MP2 NULL fact2 MP3 NULL fact2 MP4 NULL fact3 MP4 NULL fact3 MP5 NULL fact4 MP6 NULL fact5 MP7 NULL
Exemple de cas simples : {fact1, MP1} forment un dossier. Idem pour {fact4, MP6} et {fact5, MP7}
Exemple de cas plus difficile : fact2 est payé par MP2, MP3 et MP4. Il sont donc liés. Mais MP4 sert aussi à payer un bout de fact3, qui lui même... Au final, ce dossier est constitué de {fact2, fact3, MP2, MP3, MP4, MP5}
Je dois donc obtenir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 RefFact RefMP numDossier ----------------------------- fact1 MP1 1 fact2 MP2 2 fact2 MP3 2 fact2 MP4 2 fact3 MP4 2 fact3 MP5 2 fact4 MP6 3 fact5 MP7 4
J'ai essayé différents bidouillages (que je ne montrerai pas, ils piquent tellement les yeux qu'on risque une épidémie de conjonctivite dans la communauté de dev SQL ).
J'ai notamment essayé une autojointure sur la ligne précédente (la table possède un id), mais ça ne fonctionne que si les lignes sont ordonnées dans le fichier et je viens d'apprendre que ça ne serait pas le cas. (Et de toute manière, j'ai appris ici que c'était une sorte d'hérésie...)
Quelqu'un a-t-il une solution pour ce problème ?
Merci d'avance !
PS : Pour info je suis sous SQL Server 2005
Partager