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 :

Remplacer la fonction DMin


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Femme Profil pro
    Stagiaire
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Remplacer la fonction DMin
    Bonjour,

    J'utilise actuellement la fonction DMin, qui ne peut être utilisée que sur une seule table. Or j'aimerais pouvoir avoir le même résultat sans avoir à ajouter dans une table les résultats de deux requêtes.

    Je m'explique : voici mes deux requêtes, qui ajoutent toutes les deux des enregistrements à la table T_Sum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO T_Sum ( [Document achat], Poste, [Date livraison stat], SommeRgE, [Qté échéancée], Type, IdE )
    SELECT T_OriginE.[Document achat], T_OriginE.Poste, T_OriginE.[Date livraison statistique], SumRangE([ID],[Date livraison statistique],[Document achat],[Poste]) AS SommeRgE, Replace([Quantité échéancée],".",",") AS [Qté éché], "E" AS Type, T_OriginE.ID
    FROM T_OriginE
    ORDER BY T_OriginE.[Document achat], T_OriginE.Poste, T_OriginE.[Date livraison statistique], T_OriginE.ID;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO T_Sum ( [Document achat], Poste, [Date livraison stat], SommeRgE, [Qté échéancée], Type )
    SELECT T_OriginHC.[Document achat], T_OriginHC.Poste, T_OriginHC.[Date pièce], SumRangHC([ID],[Date pièce],[Document achat],[Poste]) AS SommeRgHC, T_OriginHC.[Quantité HC], "B" AS Type
    FROM T_OriginHC
    ORDER BY T_OriginHC.[Document achat], T_OriginHC.Poste, T_OriginHC.[Date pièce], T_OriginHC.ID;
    J'obtiens donc une table T_Sum qui a cette allure :
    Document achat; Poste; Type; Date livraison stat; SommeRgE; Qté échéancée; IdE
    4500346129; 60; B; 14.05.2014; 5; 5;
    4500346129: 60; B; 12.06.2014; 11; 6;
    4500346129; 60; E; 02.05.2014; 7; 7; 1335
    4500346129; 60; E; 14.05.2014; 12; 5; 1336

    Ensuite j'utilise une requête nommée Q_DeliveryDate pour trouver, pour chaque ligne de type "E", les lignes de type "B" pour lesquelles la somme livrée (SommeRgE) est supérieure ou égale. La requête affiche alors la première "Date livraison stat" qui vérifie ce critère. Voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Nz(DMin("[Date livraison stat]","T_Sum","[SommeRgE] >= " & NumberUS([SommeRgE]) & " AND  [T_Sum]![Document achat] = '" & [T_Sum]![Document achat] & "' AND [T_Sum]![Poste] = " & [T_Sum]![Poste] & " AND [T_Sum]![Type] = 'B'"),"Livraison incomplète") AS [Date pièce], T_Sum.SommeRgE, T_Sum.[Document achat], T_Sum.Poste, T_Sum.Type, T_Sum.[Date livraison stat], T_Sum.RangE, Nz(DMin("[Date livraison stat]","T_Sum","[SommeRgE] > " & NumberUS([SommeRgE]) & " - " & NumberUS([Qté échéancée]) & " AND  [T_Sum]![Document achat] = '" & [T_Sum]![Document achat] & "' AND [T_Sum]![Poste] = " & [T_Sum]![Poste] & " AND [T_Sum]![Type] = 'B'"),"Pas encore livré") AS [Date Pièce Min], T_Sum.[Qté échéancée], T_Sum.IdE
    FROM T_Sum
    WHERE (((T_Sum.Type)="E") 
    ORDER BY T_Sum.[Document achat], T_Sum.Poste, T_Sum.[Date livraison stat];
    Voici le résultat de la requête pour la 3e ligne de mon exemple :
    Date pièce; SommeRgE; Document achat; Poste; Type; Date livraison stat; Date Pièce Min; Qté échéancée; IdE
    12.06.2014; 7; 4500346129; 60; E; 02.05.2014; 14.05.2014; 7; 1335

    J'aimerai remplacer les fonctions DMin de ma requête Q_DeliveryDate par du code SQL qui me permettrait de travailler directement sur mes deux requêtes de départ et de ne pas avoir à créer une table T_Sum. Est-ce possible ? Pour l'instant je n'arrive même pas à trouver la jointure qui me permettrait d'avoir mon résultat .

    Merci d'avance !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    Citation Envoyé par bmazoyer Voir le message
    ... et de ne pas avoir à créer une table T_Sum. Est-ce possible ?
    Les deux tables sont similaires, tu peux faire une requête T_Sum avec UNION :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Document achat], Poste, [Date livraison stat], ... FROM T_OriginE
    UNION ALL
    SELECT [Document achat], Poste, [Date livraison stat], ... FROM T_OriginHC

  3. #3
    Candidat au Club
    Femme Profil pro
    Stagiaire
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci! Ca marche, mais ensuite la requête Q_DeliveryDate appliquée à cette nouvelle requête est beaucoup plus lente... Et quand j'essaye d'exporter le résultat au format excel pour l'envoyer à mes collègues, c'est la catastrophe, j'en ai presque pour une demie-heure. D'où pourrait provenir le problème?
    J'ai essayé de remplacer la fonction DMin de la requête Q_DeliveryDate par du SQL (SELECT Min([Date livraison stat]) etc.), en m'aidant du cours sur les fonctions de domaine dans Access, mais c'est pire : ca va tellement lentement que je n'ai pas pu obtenir le résultat et le vérifier.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    Citation Envoyé par bmazoyer Voir le message
    Ensuite j'utilise une requête nommée Q_DeliveryDate pour trouver, pour chaque ligne de type "E", les lignes de type "B" pour lesquelles la somme livrée (SommeRgE) est supérieure ou égale. La requête affiche alors la première "Date livraison stat" qui vérifie ce critère.
    On doit pouvoir aussi y arriver par autojointure, un truc du style :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ...
    FROM T_Sum X INNER JOIN T_Sum Y
    ON X.[Document achat] = Y.[Document achat] AND X.[Poste] = Y.[Poste]
    WHERE X.Type='E' AND Y.Type='B' AND Y.SommeRgE>=X.SommeRgE

Discussions similaires

  1. [dlgProc] Peut on remplacer la fonction DlgProc d un HWND
    Par magnus2005 dans le forum Windows
    Réponses: 2
    Dernier message: 11/04/2007, 09h24
  2. Comment remplacer une fonction d une touche clavier
    Par dominic75 dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 10/04/2006, 17h09
  3. [Mail] remplacer la fonction mail()
    Par Tostaki dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2006, 21h27
  4. [Migration D1->D5]Remplacer la fonction MaxAvail
    Par Laurent Dardenne dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 19h22
  5. Remplacement des fonctions D3DX
    Par pot dans le forum DirectX
    Réponses: 1
    Dernier message: 23/11/2005, 18h37

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