ACCESS / SQL - SQL/NoSQL - Programmation
Marsh Posté le 09-06-2005 à 16:06:40
Access ne supportant pas les langages de type T-SQL, je pense que tu ne pourras pas faire autrement que de passer par du VBA.
Marsh Posté le 09-06-2005 à 16:53:03
si il y a plus de commandes que de livraisons (c'est logique)
un left join devrait faire l'affaire non?
Code :
|
ou alors j'ai pas bien saisi la question
Marsh Posté le 09-06-2005 à 17:08:32
C'était ma première idée (fausse), mais la requête me sort 39 000 lignes alors que j'ai 3 000 lignes de commandes.
Le N° de commande n'est pas la Clef, il n'est pas unique (puisque je travaille sur les lignes de commande et pas les commandes). Mon intuition (svt trompeuse) me dit que ça vient de là ....
bref je me demande si je peux m'en sortir juste en SQL ...
Marsh Posté le 09-06-2005 à 17:13:41
ze soucy, c'est qu'il n'y a pas d'ID permettant d'associer une ligne de facture à une ligne de livraison à ce que je vois.
à partir de là, impossible de faire une jointure digne de ce nom.
Marsh Posté le 09-06-2005 à 17:56:50
Je suis DIEU
J'ai réussi, en SQL pure !
Par contre, c'est pas propre
Limitation :
-> 5 requêtes pour arriver au résultat
-> 2 des requêtes peuvent nécessiter un bon travail de copier/coller : faut faire un "count(*)" sur commande et livraison, groupé par numcde, et avoir autant de union que le plus grand de ces count dans chacune des deux requêtes.
Les requêtes :
"commande_bis" (c'est là qu'il faut rajouter des UNION en fonction du MAX du COUNT des cde par numcde)
Code :
|
commande_ter :
Code :
|
livraison_bis (là aussi faut jouer avec les UNION)
Code :
|
livraison_ter :
Code :
|
final :
Code :
|
Marsh Posté le 09-06-2005 à 17:57:44
Testé avec ton jeu de données.
Résultat :
Code :
|
Marsh Posté le 09-06-2005 à 18:02:45
Putain, elles font chier tes dates de livraison, c'est elles qui foutent le bronx
Marsh Posté le 09-06-2005 à 18:11:54
Bon, ben pas dieu en fait, juste Shaman, mon ancien titre
J'arrive pas à m'en sortir, c'est relou ton truc
Marsh Posté le 09-06-2005 à 18:26:16
Bon, ça me gonfle, je rentre chez moi (vais pas faire des heures supp pour corriger un problème qui n'a rien à voir avec mon boulot non plus )
Marsh Posté le 09-06-2005 à 18:27:25
Citation : |
franchement c'est bien pense mais tout ce SQL cafait peur
Marsh Posté le 09-06-2005 à 19:20:49
Ben le souci en effet, c'est de réussir à générer des numéro de lignes dans les commandes et les numéros, car c'est ça qui manque le plus : un lien entre numéro de commande et numéro de ligne permettrait de faire la jointure externe.
Malheureusement, autant avec un CURSEUR c'est simple comme choux, autant avec Access on ne peut pas utiliser ça.
Avec Oracle, il y a aussi le rownum, qui permettrait d'avoir un semblant de début de solution, mais à nouveau, avec Access ça n'existe pas.
Donc ma solution semblait la plus simple a mettre en oeuvre, mais le pépin, c'est ensuite pour les livraisons, les dates étant différentes, on ne peut pas s'en sortir, et on se retrouve avec le même problème
Marsh Posté le 17-06-2005 à 10:04:37
betsamee a écrit : si il y a plus de commandes que de livraisons (c'est logique)
|
C'était presque ça: en fait il faut faire un select distinct
Marsh Posté le 09-06-2005 à 16:04:41
Bonjour,
J'ai 2 tables une avec des lignes de commande et une autre avec des
lignes de livraison j'aimerai bien fusionner les 2 en une seule. Le
problème c'est que je dois recopier « intelligemment » les données, si
j'ai 30 lignes de commande et 25 lignes de livraison(liées par le meme N° de commande) il faut que dans ma table finale j'ai 5 enregistrements avec le champ livraison incomplet.
Ca donne a peu pres ça :
Commande
----------------
ID DATE N° commande
1 12/05/03 4
2 12/05/03 4
3 12/05/03 4
4 15/09/04 12
5 12/10/04 13
Livraison
-------------
ID DATE N° commande
1 18/06/03 4
2 19/11/04 13
3 20/06/05 4
4 …..
j'aimerai bien avoir :
ID DATE COMMANDE DATE LIVRAISON N° commande
1 12/05/03 18/06/03 4
2 12/05/03 20/06/05 4
3 12/05/03 4
4 15/09/04 12
5 12/10/04 20/06/05 13
est ce possible en SQL ou dois-je passer par du VBA ? je ne vois
vraiment pas comment m'y prendre …
Merci d'avance