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 :

Affichage de toutes les lignes de 2 tables jointes


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Affichage de toutes les lignes de 2 tables jointes
    Bonjour tout le monde.

    Petite question de sql dans une requête access.
    Je suis en train de créer un fichier pour gestion de commande. Chaque client ne passe qu'une commande par an. Je souhaiterai rajouter une case à cocher pour visualiser les clients ayant renvoyer une réponse (avec ou sans commande) chaque année pour mieux gérer les relances clients.

    J'ai donc 2 tables: une table 'client' et une table 'client répondu'. La table 'client répondu' contient simplement,un N°, la liste de choix client, une case oui/non, et l'année où il a répondu.

    J'essaie de créer une requête qui m'affiche toute la table 'client' avec en plus la case à cocher de l'année en cours, une fois cocher, ceci ajoute automatiquement une nouvelle ligne dans la table 'client répondu'.
    Un petit dessin valant mieux qu'un long discours, je mets une image de ce que j'arrive à faire pour le moment:
    J'ai ajouté une expression: année validé pour sélectionné uniquement l'année en cours. Un filtre me permet d'enlever les années antérieurs.

    Là où se pose mon problème est au niveau du nom BAUER: il n'y a pas de ligne pour 2009. Il ne s'affichera donc pas avec le filtre.

    J'ai essayé de regarder les requetes SQL select UNION ou SELECT OUTER, mais elles ne m'affichent pas une ligne pour chaque client pour l'année en cours.

    Je pense qu'il me faudrait afficher toutes les lignes de la tables 'client' et aussi toutes les lignes de la tables 'client répondu' pour que je puisse ensuite mieux filtrer, mais ces 2 tables sont jointes par le N° client.

    Comment modifier cette requête SQL pour afficher l'ensemble des 2 tables?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Client.N°, Client.Nom, Client.Prénom, Client.contact, Client.[Adresse de messagerie], Client.Téléphone, Client.[Numéro de télécopie], Client.Adresse, Client.Ville, Client.[Code postal], Client.[Pays/Région], Client.Remarques, [Client répondu].Répondu, [Client répondu].[Année réponse], IIf([Client répondu.Année Réponse]<>Year(Date()),True,False) AS [Année valide]
    FROM Client LEFT JOIN [Client répondu] ON Client.N° = [Client répondu].Client;

    Merci d'avoir pris le temps de lire mon problème et merci pour toutes indication pouvant me permettre de le résoudre.

    François
    Images attachées Images attachées   

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 089
    Points : 5 206
    Points
    5 206
    Par défaut
    Bonjour,

    Pour avoir une ligne si le client n'a pas répondu cette année là, il faudrait filtrer sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isnull(annee) or annee=2009
    et non sur l'année seulement


    Et pis aussi arrêter les espaces dans les noms
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup d'avoir pris la peine de t'intéresser à mon problème.

    Si j'ai bien compris tu veux que je rajoute un filtre directement sur la colonne année car celle ci peut-être vide quand il n'y a jamais eu de réponse ou vaut une année antérieur ou l'année en cours.

    Ceci semble en effet interessant et m'évite de rajouter mon expression 'Année validé', mais malheureusement, comme j'ai mes 2 tables jointes, il apparait en face de BAUER dans l'exemple l'année où il avait déjà répondu. Donc la colonne année n'est pas nulle pour la ligne BAUER.

    En fait il faudrait qu'il ajoute une nouvelle ligne avec l'année vide si l'année est antérieur. Donc qu'il ne m'effectue la jointure que sur l'année en cours.

    Pour les espaces dans les noms, j'en prends bonne note pour mes programmations à venir.

    JE ne sais pas trop si ceci est faisable sous access...

    Merci encore pour votre aide si vous avez d'autres idées.

    François

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 089
    Points : 5 206
    Points
    5 206
    Par défaut
    Citation Envoyé par 84germain Voir le message
    malheureusement, comme j'ai mes 2 tables jointes, il apparait en face de BAUER dans l'exemple l'année où il avait déjà répondu.
    Exact j'aurais dû y penser
    Voici une solution parmi d'autres qui fait le filtre dans la requête, j'avoue ne pas trouver de solution pour filtrer à posteriori :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Client.N°, Client.Nom, Client.Prénom, Client.contact, Client.[Adresse de messagerie], Client.Téléphone, Client.[Numéro de télécopie], Client.Adresse, Client.Ville, Client.[Code postal], Client.[Pays/Région], Client.Remarques, [Client répondu].Répondu, [Client répondu].[Année réponse], IIf([Client répondu.Année Réponse]<>Year(Date()),True,False) AS [Année valide]
    FROM Client LEFT JOIN (select * from [Client répondu] where year([Client répondu.Année Réponse])=year(date())) as X ON Client.N° = X.Client;
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Merci encore pour ton aide.
    Si j'ai bien compris la formule SQL va renommé la table en X.
    J'ai bien essayé ta solution,mais le fait de créer une nouvelle table X, empêche la requête de retrouver les informations déjà rentrée dans la table 'client répondu' et donc quand j'ouvre la requête toute les cases Répondu sont vides.

    Si je ne trouve pas de solution, je ne vais plus garder les années dans ma table car l'information n'est pas nécessaire d'être stocké. Et je vais rajouter un bouton pour remettre à 0 toutes les cases répondu en début d'année.


    Merci beaucoup pour ton aide.

    François

  6. #6
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 089
    Points : 5 206
    Points
    5 206
    Par défaut
    X est une requête sur la table [Client répondu] qui ne retient que les réponses de l'année en cours

    Ca marchera peut-être mieux comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Client.N°, Client.Nom, Client.Prénom, Client.contact, Client.[Adresse de messagerie], Client.Téléphone, Client.[Numéro de télécopie], Client.Adresse, Client.Ville, Client.[Code postal], Client.[Pays/Région], Client.Remarques, X.Répondu, X.[Année réponse], IIf(X.[Année Réponse]<>Year(Date()),True,False) AS [Année valide]
    FROM Client LEFT JOIN (SELECT * FROM [Client répondu] WHERE year([Client répondu.Année Réponse])=year(date())) AS X ON Client.N° = X.Client;
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/04/2009, 00h42
  2. Réponses: 2
    Dernier message: 23/04/2009, 10h24
  3. Réponses: 1
    Dernier message: 22/04/2009, 22h39
  4. Supprime toutes les lignes d'une table fichier
    Par Loko dans le forum WinDev
    Réponses: 38
    Dernier message: 10/12/2007, 16h21
  5. Réponses: 4
    Dernier message: 11/10/2005, 15h03

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