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 :

Champ d'une table liée (avec gestion de l'historique) comme critère d'une requete


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Champ d'une table liée (avec gestion de l'historique) comme critère d'une requete
    Dernière question de la journée...

    Je veux faire un état qui affiche toutes les commandes pas encore livrées. Donc je l'ai basé sur une requete basée sur les tables liées "commandes" et "statut commande" (une commande peut avoir plusieurs statut, j'en garde un historique) dans laquelle je mets un critère "Non" au champ "Commande livrée" (champ booléen de la table "statut commande").
    Mais forcément, ca m'affiche toutes les enregistrements des commandes qui ont été marquées un jour comme non livrées, c'est à dire en fait toutes les commandes de la base.
    Ce que je voudrais, c'est dire en gros "affiche dans ma requete les numéros de commandes qui n'ont jamais été marquées comme livrées dans la table "statut commandes" ".

    Merci

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    rassurez-moi, y'a bien des dates dans votre gestion de l'historique ?

    Philippe

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    oui, bien sur, il y a des dates et un champ "revision": quand on rentre une commande pour la première fois, c'est la révision 0, et après cahque modification correspond aux révisions 1, 2, 3...

  4. #4
    Membre habitué Avatar de ariesnojf
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    195
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 195
    Points : 188
    Points
    188
    Par défaut
    Je comprend pas bien votre problème, ...

    Je suppose, que si la commande est livrée, il y a une gestion du statut de la commande livrée et donc que celui-ci passe à OUI.
    On a donc toutes les commandes qui sont en cours et qui ne sont pas encore livrées d'un côté avec le le flag commande livrée à NON et de l'autre celles qui ont étées traités dont le statut est à OUI.
    La requête se fait sur le statut = NON du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT num_commande, libelle_commande
    FROM commandes, statut_commande 
    WHERE commandes.num_commande = statut_commande.num_commande
    AND statut_commande = 'NON';
    N'est-ce pas cela ???

    Une fois de plus je comprend pas cela, pouvez vous m'eclairez :

    Citation Envoyé par kangourou_agile
    Mais forcément, ca m'affiche toutes les enregistrements des commandes qui ont été marquées un jour comme non livrées, c'est à dire en fait toutes les commandes de la base.
    Ce que je voudrais, c'est dire en gros "affiche dans ma requete les numéros de commandes qui n'ont jamais été marquées comme livrées dans la table "statut commandes" ".
    Aries No JF

    Il faut toujours viser la lune, car même en cas d'échec, on atterit dans les étoiles. (O. WILDE)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Non, ca ne marche pas: ma table qui gère l'historique conserve la trace de tous les statuts par lesquels sont passés les commandes, qui peuvent être pafois refusées plusieurs fois avant d'être acceptées.

    Par exemple

    N° commande revision date statut

    12345 0 01/07/2006 refusé
    12345 1 03/07/2006 refusé
    12345 2 04/07/2006 accepté
    56789 0 03/07/2006 refusé

    Et j'aimerais qu'il ne m'affiche que la commande 56789, c'est la seule commande qui est toujours refusée. Mais ma requete me sort les révisions 1 et 2 de la commande 12345 et la commande 56789.

    Comment lui dire qu'en fait, je ne veux travailler que sur le numéro de révision le plus élevé pour avoir le statut ACTUEL des commandes?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Points : 16
    Points
    16
    Par défaut une solution en 2 requêtes
    Bonjour

    La première que l'on peut nommer "Dernière commande" ne renvoie que la dernière revision pour un numéro de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT commandes.N°commande, Max(commandes.révision) AS MaxDerévision
    FROM commandes
    GROUP BY commandes.N°commande;
    La seconde basée sur la première fait 2 jointures entre la table "commandes" et la requête "Dernière commande".
    jointure 1 : Dernière commande].N°commande = commandes.N°commande
    jointure 2 : ([Dernière commande].MaxDerévision = commandes.révision
    Il suffit de rajouter le filtre pour ne garder que la commande refusée.
    filtre : (commandes.statut)="refusé"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT commandes.N°commande, commandes.révision, commandes.date, commandes.statut
    FROM [Dernière commande] INNER JOIN commandes ON ([Dernière commande].N°commande = commandes.N°commande) AND ([Dernière commande].MaxDerévision = commandes.révision)
    WHERE (((commandes.statut)="refusé"));

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    Bonjour,

    en alternative, avec une seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT T1.[n° commande]
    FROM [statut commande] AS T1 INNER JOIN [statut commande] AS T2 ON T1.[n° commande] = T2.[n° commande]
    WHERE T1.Statut=False
    GROUP BY T1.[n° commande], T1.Revision
    HAVING Max(T2.Revision)=[T1].[Revision];
    Philippe

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    merci bcp, ca marche nickel!!

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

Discussions similaires

  1. [AC-2003] Structure d'une table liée avec lien inactif?
    Par marot_r dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/02/2010, 14h59
  2. Réponses: 9
    Dernier message: 27/09/2007, 15h15
  3. requete sur 2 tables liées avec même nom de champs
    Par Australia dans le forum Access
    Réponses: 5
    Dernier message: 02/02/2006, 11h38
  4. UPDATER le champ d'une table 1 avec le champ d'une table 2
    Par alain.dissoir dans le forum Oracle
    Réponses: 2
    Dernier message: 08/06/2005, 13h07
  5. [select dans case] reconnaitre un champ d une table liée
    Par the_edge dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 22/10/2004, 16h47

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