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 :

Champs manquants à partir de sous-requête [AC-2013]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Champs manquants à partir de sous-requête
    Bonjour à tous,
    Cela fait un moment que je cherche une solution à mon problème sur le forum, mais je ne trouve pas alors je me lance !

    Ma base de données est en fait un herd-book, j'ai donc une table 'Animal' avec tous les animaux avec les champ [N°animal], [Sexe], [CodeRace] et [N°eleveur].
    Mon objectif est de connaitre le nombre d'animaux mâle et femelle, pour certaines races détenus par chaque éleveur.
    J'ai donc fait une 1ere sous-requête 'Femelle_reproductrice' qui compte par N°eleveur le nombre de femelle en fonction de la race choisie. Idem pour les mâles.
    J'ai ensuite une requête finale, qui regroupe les 2 sous-requête et affiche pour chaque N°eleveur le nombre de mâles et femelles sur l'élevage.

    Mon problème est que si un éleveur ne possède pas d'animaux mâles mais uniquement des femelles, il n’apparaît pas dans la sous-requête Mâle, et donc pas dans la requête finale.

    Comment puis-je faire pour que ma requête finale affiche tous les éleveurs ensemble ?

    Merci d'avance pour votre aide !!

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 180
    Points : 84 974
    Points
    84 974
    Billets dans le blog
    15
    Par défaut


    Il vous faudra fournir la syntaxe de votre requête SQL pour permettre aux différents intervenants d'identifier votre problème.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Champs manquant à partir de sous-requête
    Oui c'est peut-être plus utile !

    Alors voici pour la sous-requête qui compte les femelles 'SR_nb_frv_elevage' (la sous-requête mâle est identique 'SR_nb_mrv_elevage'):

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme, Count(SR_femelles_reproductrices.Sexe) AS CompteDeSexe
    FROM SR_femelles_reproductrices INNER JOIN [Table des eleveurs] ON SR_femelles_reproductrices.[N° de cheptel] = [Table des eleveurs].[N° de cheptel]
    GROUP BY [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme,
    ORDER BY [Table des eleveurs].Patronyme;

    Et la requête qui regroupe les 2 :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme, SR_nb_frv_elevage.CompteDeSexe, SR_nb_mrv_elevage.CompteDeSexe
    FROM ([Table des eleveurs] INNER JOIN SR_nb_frv_elevage ON [Table des eleveurs].[N° de cheptel] = SR_nb_frv_elevage.[N° de cheptel]) INNER JOIN SR_nb_mrv_elevage ON [Table des eleveurs].[N° de cheptel] = SR_nb_mrv_elevage.[N° de cheptel]
    WHERE ((([Table des eleveurs].[N° de cheptel])=[Formulaires]![F_Menu]![Id_id_elev]));

    J'espère que c'est compréhensible, je ne suis pas particulièrement à l'aise avec SQL...
    Merci !

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    AdiePoppins,

    Ta solution ne constituerait elle donc pas tout simplement à faire une union de tes deux requêtes


    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme, Count(SR_femelles_reproductrices.Sexe) AS CompteDeSexe
    FROM SR_femelles_reproductrices INNER JOIN [Table des eleveurs] ON SR_femelles_reproductrices.[N° de cheptel] = [Table des eleveurs].[N° de cheptel]
    GROUP BY [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme,
    ORDER BY [Table des eleveurs].Patronyme
    union
    SELECT [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme, Count(SR_males_reproducteurs.Sexe) AS CompteDeSexe
    FROM SR_males_reproducteurs INNER JOIN [Table des eleveurs] ON SR_femelles_reproductrices.[N° de cheptel] = [Table des eleveurs].[N° de cheptel]
    GROUP BY [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme,
    ORDER BY [Table des eleveurs].Patronyme;

    Le nom SR_males_reproducteurs est à adapter suivant ton cas.

    Jimbolion

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci, je n'avais pas pensé à cette solution.
    Par contre je n'arrive pas à faire fonctionner la requête avec le code que tu m'as donné, même en renommant les champs.
    Du coup j'ai essayé d'en faire une plus simple pour commencer :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [N° de cheptel], [Organisme], [Patronyme], [Prénom],  [SR_nb_frv_elevage].[CompteDeSexe] FROM [SR_nb_frv_elevage]
    UNION
    SELECT [N° de cheptel], [Organisme], [Patronyme], [Prénom],  [SR_nb_mrv_elevage].[CompteDeSexe] FROM [SR_nb_mrv_elevage]

    Il compte bien tous les animaux (mâle et femelle), mais ne sort qu'une seule colonne. Pour chaque éleveur j'ai donc une ligne mâle et une ligne femelle, alors que j'aimerai une ligne par éleveur avec 2 colonnes disctinctes mâle et femelle.

    J'ai pensé à une jointure LEFT JOIN, mais je n'arrive pas à la faire fonctionner non plus --'. Access me dit que j'ai une "Erreur de syntaxe (opérateur absent dans l'expression)". Est ce que ça pourrais être la solution ?

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  [SR_nb_frv_elevage].[N° de cheptel], [SR_nb_frv_elevage].[Organisme], [SR_nb_frv_elevage].[Prénom], [SR_nb_frv_elevage].[CompteDeSexe] LEFT JOIN [SR_nb_mrv.elevage] ON [SR_nb_frv_elevage].[N° de cheptel] = [SR_nb_mrv_elevage].[N° de cheptel]

    Merci !

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonjour AdiePoppins, Jimbolion et milkoseck,

    Ne serait -ce pas seulement une question de "types de jointures" qui fait que ta première requête n'affiche pas les données des tables liées quand il n'y a pas de valeurs.
    Il faut définir les liaisons de ta table [Table des eleveurs] vers les 2 sous-requêtes en des jointures à gauche avec un LEFT JOIN. Ce serait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT [Table des eleveurs].[N° de cheptel], [Table des eleveurs].Patronyme, SR_nb_frv_elevage.CompteDeSexe, SR_nb_mrv_elevage.CompteDeSexe
    FROM ([Table des eleveurs] LEFT JOIN SR_nb_frv_elevage ON [Table des eleveurs].[N° de cheptel] = SR_nb_frv_elevage.[N° de cheptel]) LEFT JOIN SR_nb_mrv_elevage ON [Table des eleveurs].[N° de cheptel] = SR_nb_mrv_elevage.[N° de cheptel]
    WHERE ((([Table des eleveurs].[N° de cheptel])=[Formulaires]![F_Menu]![Id_id_elev]));
    Dans le QBE, tu double-cliques sur la ligne définissant la relation entre 2 tables et tu choisis le type de jointure.

    Cordialement,

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous,
    Merci pour votre aide j'ai enfin résolu mon problème, la solution était bien de faire une jointure pour que la 1ère requête affiche toutes les lignes éleveurs !

    Le code pour la requête SR_nb_frv_elevage:
    SELECT [Table des eleveurs].[N° de cheptel] AS Num, COUNT(SR_femelles_reproductrices.Sexe)
    FROM [Table des eleveurs] LEFT JOIN SR_femelles_reproductrices ON SR_femelles_reproductrices.[N° de cheptel] = [Table des eleveurs].[N° de cheptel]
    GROUP BY [Table des eleveurs].[N° de cheptel];

    Il ne reste plus ensuite qu'à joindre ensemble la requête 'mâle' et la requête 'femelle'.

    Merci à vous 3 !

    Adie.

  8. #8
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 180
    Points : 84 974
    Points
    84 974
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par AdiePoppins Voir le message
    Bonjour à tous,
    Merci pour votre aide j'ai enfin résolu mon problème, la solution était bien de faire une jointure pour que la 1ère requête affiche toutes les lignes éleveurs !

    Le code pour la requête SR_nb_frv_elevage:
    SELECT [Table des eleveurs].[N° de cheptel] AS Num, COUNT(SR_femelles_reproductrices.Sexe)
    FROM [Table des eleveurs] LEFT JOIN SR_femelles_reproductrices ON SR_femelles_reproductrices.[N° de cheptel] = [Table des eleveurs].[N° de cheptel]
    GROUP BY [Table des eleveurs].[N° de cheptel];

    Il ne reste plus ensuite qu'à joindre ensemble la requête 'mâle' et la requête 'femelle'.

    Merci à vous 3 !

    Adie.
    De rien

    Pour tes futures interrogations, merci de bien vouloir utiliser le bouton de la balise CODE afin que la syntaxe soit plus lisibles.

    @+

    Cordialement

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

Discussions similaires

  1. ORACLE - Récupération champ sous requête
    Par bletz dans le forum SQL
    Réponses: 1
    Dernier message: 24/02/2009, 22h49
  2. Comment créer une sous requête sur plusieurs champs?
    Par Anonymouse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 10/06/2008, 09h13
  3. initialisation champ à partir d'une requête
    Par geckobleu dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/02/2008, 22h16
  4. Sélection de tous les champs d'une sous-Requête que je redéfini
    Par electrosat03 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/06/2007, 16h43
  5. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 07h54

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