IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Combiner des tables articles et vides dans les enregistrements


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Combiner des tables articles et vides dans les enregistrements
    Bonjour,

    Après m'être bien creusé la tête toujours sans y arriver (je précise aussi que je débute avec access), je vous propose de m'aider à résoudre mon problème

    Ma base de données manipule des articles qui sont achetés à un fournisseur puis loués pour une durée variable à des clients.

    J'ai réalisé un calendrier à partir de 3 tables jours, mois et années.

    Calendrier

    Ci-dessous, les autres tables que j'ai créé:

    CommandeEntrée
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    N°	DateCommande
    1	01/01/2009
    2	01/05/2009


    DétailCommandeEntrée
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    N°	Ref	Quantité
    1	A	50
    1	B	100
    1	C	70
    2	A	20
    2	B	15
    2	C	10
    2	AA	30
    2	BB	20



    CommandeSortie
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    N°	Client	DateDébut	  DateFin
    1	Z	01/03/2009	  01/06/2009
    2	Y	01/04/2009	  01/10/2009

    DétailSortie
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    N°	Ref	Quantité
    1	A	10
    1	B	20
    1	C	15
    2	A	30
    2	B	40
    2	C	65


    Le but est d'obtenir, grâce à une (ou plusieurs) requête(s), un tableau de tous les articles commandés avec leur quantité/disponibilité sur un intervalle de temps fixé grâce aux paramètres D1 et D2.

    Ex:
    D1: 01/01/2009
    D2: 01/01/2010

    Résultat du type:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    Date		Ref	QuantitéEntrée	QuantitéSortie	QuantitéDispo
    01/01/2009	..	..		..		..
    ..		..	..	       	..		..
    01/02/2009	A	50		0       	50
    01/02/2009	B	100     	0        	100
    01/02/2009	C	70     		0       	70
    02/02/2009	A	50	        0       	50
    02/02/2009	B	100     	0       	100
    02/02/2009	C	70     		0       	70
    03/02/2009	..	..		..         	..
    ..		..	..		..         	..
    01/05/2009	A	70     		40	        30
    01/05/2009	B	115     	60      	55
    01/05/2009	C	80     		80      	0
    01/05/2009	AA	30      	0       	30
    01/05/2009	BB	20      	0        	20
    ..		..	..       	..       	..
    01/01/2010	..	..       	..      	..



    Je serai très reconnaissant que vous releviez ce défi et m'aidiez.

    Merci d'avance,

    tomZH

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Up !

    J'ai essayé pas mal de requêtes, mais n'y arrive toujours pas... Je commence à devenir fou



    Personne d'entre vous pour qui c'est très simple pour me filer un p'tit coup de main ?

    La par exemple voila ce que j'ai fais:

    La requête calendrier qui rend un calendrier compris entre StartDate et EndDate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DateSerial(Années.Année,Mois.Mois,Jours.Jour) AS D
    FROM Années, Jours, Mois
    WHERE IsDate(Jours.Jour & "/" & Mois.Mois & "/" & Années.Année) And DateSerial(Années.Année,Mois.Mois,Jours.Jour)>=CDate([Formulaires]![Détails Article]![StartDate]) And DateSerial(Années.Année,Mois.Mois,Jours.Jour)<=CDate([Formulaires]![Détails Article]![EndDate])
    ORDER BY Années.Année, Mois.Mois, Jours.Jour;
    Entre StartDate et EndDate,
    #
    Une requête pour rassembler toutes les commandes au fournisseur:

    Stock Article entré Plage Date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Calendrier +].D, [Détail Commande entrée].[Référence Article], [Détail Commande entrée].Quantité, [Commande entrée].[Date de commande]
    FROM [Calendrier +], [Commande entrée] INNER JOIN [Détail Commande entrée] ON [Commande entrée].[N° de commande] = [Détail Commande entrée].[N° de commande]
    WHERE (((CDate([Commande entrée].[Date de commande]))<=CDate([Calendrier +].[D])))
    ORDER BY [Calendrier +].D;
    Une requête pour faire la somme des quantité des mêmes articles pour une même date:

    Stock Article entré Plage Date /SommeQ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Stock Article entré Plage Date].D, [Stock Article entré Plage Date].[Référence Article], Sum([Stock Article entré Plage Date].Quantité) AS Quantité
    FROM [Stock Article entré Plage Date]
    GROUP BY [Stock Article entré Plage Date].D, [Stock Article entré Plage Date].[Référence Article];
    qui donne comme partit du résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    D	Référence Article	Quantité
    01/01/2009	B	    50
    01/01/2009	C          50
    01/01/2009	D          50
    02/01/2009	B          50
    02/01/2009	C	    50
    02/01/2009	D	    50
    03/01/2009  B          50
    03/01/2009	C          50
    03/01/2009	D	    50
    04/01/2009	B          50
    04/01/2009	C          50
    04/01/2009	D	    50
    05/01/2009	B	    50
    05/01/2009	C	    50
    #
    Une requête pour rassemler toutes les commandes clients:

    Stock Article sorti Plage Date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Calendrier +].D, [Commande sortie].Client, [Commande sortie].[Date de début], [Commande sortie].[Date de fin], [Détail Commande sortie].[Référence article], [Détail Commande sortie].Quantité
    FROM [Calendrier +], [Commande sortie] INNER JOIN [Détail Commande sortie] ON [Commande sortie].N°=[Détail Commande sortie].[Réf Commande]
    WHERE ((([Commande sortie].[Date de début])<=[Calendrier +].D) And (([Commande sortie].[Date de fin])>=[Calendrier +].D))
    ORDER BY [Calendrier +].D;
    Une requête pour faire la somme des même articles sortis pour un même jours

    Stock Article sorti Plage Date /SommeQ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Stock Article sorti Plage Date].D, [Stock Article sorti Plage Date].[Référence article], Sum([Stock Article sorti Plage Date].Quantité) AS Quantité
    FROM [Stock Article sorti Plage Date]
    GROUP BY [Stock Article sorti Plage Date].D, [Stock Article sorti Plage Date].[Référence article];
    Qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    D	Référence article	Quantité
    ...
    11/03/2009	B         35
    11/03/2009	C	   38
    12/03/2009	B	   35
    12/03/2009	C	   38
    13/03/2009  B         45
    13/03/2009	C	   48
    14/03/2009	B	   45
    14/03/2009	C	   48
    15/03/2009	B	   45
    15/03/2009	C	   48
    ...
    #
    Une requête finale DispoPlageDate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [Stock Article entré Plage Date /SommeQ].D, [Stock Article entré Plage Date /SommeQ].[Référence Article], [Stock Article entré Plage Date /SommeQ].Quantité AS QuantitéEntrée, [Stock Article sorti Plage Date /SommeQ].Quantité AS QuantitéSortie, [Stock Article sorti Plage Date /SommeQ].[Référence article], [Stock Article entré Plage Date /SommeQ].Quantité-[Stock Article sorti Plage Date /SommeQ].Quantité AS [Quantité dispo]
    FROM [Stock Article entré Plage Date /SommeQ] LEFT JOIN [Stock Article sorti Plage Date /SommeQ] ON ([Stock Article entré Plage Date /SommeQ].[Référence Article]=[Stock Article sorti Plage Date /SommeQ].[Référence article]) AND ([Stock Article entré Plage Date /SommeQ].D=[Stock Article sorti Plage Date /SommeQ].D);

    Qui donne pas ce que je veux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    D	Référence article entré	QuantitéEntrée	QuantitéSortie	Référence article sorti	Quantité dispo
    09/03/2009	B	50			
    09/03/2009	C	50			
    09/03/2009	D	50			
    10/03/2009	B	50			
    10/03/2009	C	50			
    10/03/2009	D	50			
    11/03/2009	B	50		35			B		15
    11/03/2009	C	50		38			C		12
    11/03/2009	D	50			
    12/03/2009	B	50		35			B		15
    12/03/2009	C	50		38			C	        12
    12/03/2009	D	50			
    13/03/2009	B	50		45			B	        5
    13/03/2009	C	50		48			C	       	2
    13/03/2009	D	50			
    14/03/2009	B	50		45			B	         5
    14/03/2009	C	50		48			C	         2
    14/03/2009	D	50			
    15/03/2009	B	50		45			B		5
    Il manque donc les quantités=0 pour les articles entrés qui ne sont pas commandés par des clients, ou des articles commandés n'apparaissent même pas dans le résultat.
    Vous remarquerez aussi que mes requêtes ne doivent pas être très belles, et que j'ai besoin de vous!

    Merci d'avance de bien vouloir m'aider ou de laisser des commentaires, remarques...!!

    tomZH

  3. #3
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Pourquoi avoir 3 tables "jours", "mois" et "années" ?
    Pour en fait concaténer les 3 en 1 ?

    Pour les quantités = 0 voir les fonction ISNULL() et NZ() ou une discussion à ce sujet ici !



    [Edit]

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Merci de ta réponse.

    Oui 3 tables jours,mois et années pour les concaténer en une seule.

    Merci aussi pour le lien vers la discussion sur les champs vides. J'avais trouvé une discussion à ce sujet mais pas celle que tu m'as indiqué. J'essayais en effet de faire intervenir la fonction Nz() mais n'y arrivais toujours pas.
    Quand après une pause je m'y suis remis...et bingo! je suis arrivé au tableau que je voulais !!!


    tomZH

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/12/2012, 17h05
  2. Réponses: 1
    Dernier message: 02/07/2008, 17h30
  3. Réponses: 15
    Dernier message: 29/10/2006, 19h01
  4. Réponses: 3
    Dernier message: 20/09/2006, 23h35
  5. [HTML] Combiner des tables
    Par zoreil dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 27/07/2006, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo