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 :

Croisement de données sur une seule des deux tables


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Croisement de données sur une seule des deux tables
    Hello !
    Je viens solliciter votre aide. Je bosse actuellement sur ACCESS 2016 et réalise un projet visant à calculer des écarts.
    J’ai deux tables qui proviennent d’extracts de deux outils différents.
    J’arrive à croiser les données présentes dans les deux tables.

    Là où ça se corse pour moi depuis un petit moment, c’est pour récupérer des infos présentes que sur l’une des deux tables.
    L’une d’entre elles j’ai réussi : récupérer les lignes avec le nom de magasin « Autre ».

    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
    SELECT a.id, a.NomPrenom, a.Store, a.Year, a.Week, a.QuatityA, b.QuantityB, ROUND((a.QuantityA-b.QuantityB),1) AS Ecart
    FROM requete1 AS a, requete2 AS b
    WHERE a.id= b.id
    AND a.Store= b.Store
    AND a.Week = b.Week
    GROUP BY a.id, a.NomPrenom, a.Store, a.Year, a.Week, a.QuantityA, b.QuantityB
    ORDER BY a.id, a.NomPrenom, a.Store, a.Week
     
    UNION SELECT a.id, a.NomPrenom, a.Store, a.Year, a.Week, a.QuantityA, b.QuantityB, ROUND((a.QuantityA-b.QuantityB),1) AS Ecart
    FROM requete1 AS a, requete2 AS b
    WHERE a.id= b.id
    AND a.CodeProjet = "Autre"
    AND a.Week = b.Week
    GROUP BY a.id, a.NomPrenom, a.Store, a.Week, a.Year, a.QuantityA, b.QuantityB
    ORDER BY a.id, a.NomPrenom, a.Store, a.Week

    Le souci que j’ai à présent, c’est que je souhaiterais faire apparaitre les lignes présentes sur la table A, mais pas dans la B. Avec le même ID, et le même Store.

    Ces lignes n'apparaissent pas dans mon résultat de requete "écart" car elles n'existent pas dans ma table initiale de l'outil B.

    Du coup le soucis que j'ai, c'est que ça me fait remonter uniquement les lignes pour lesquelles les a.Week = b.Week.

    J'ai essayé de retirer le critère des Week égalemes. Ca me renvoie toutes les semaines que je veux, mais le soucis c'est que ça me renvoie 4 ou 5 lignes identiques avec pour seule différence les différentes b.QuantityB possibles pour ladite semaine.

    J'ai testé des Not exists et IIF/VraiFaux mais sans succès, erreur de ma part très certainement...

    Auriez-vous des idées ou des solutions à me proposer svp ? J'espère avoir été assez clair

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    et avec la notion de isnull du coté de la table B
    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT INTERVENTION.INT_ID
    FROM INTERVENTION LEFT JOIN AFF_MAT ON INTERVENTION.INT_ID = AFF_MAT.AFF_MAT_INT_ID
    WHERE (((AFF_MAT.AFF_MAT_INT_ID) Is Null));
    Apres je l'avoue je ne suis pas un super Pro du SQL...
    mais il y a des demi-dieux ici... lol

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse, j'ai testé avec Is null comme tu m'as conseillé en ajoutant une sous-requête au code initialement posté (cf.codeci dessous).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UNION SELECT a.id, a.NomPrenom, a.Store, a.Year, a.Week, a.QuantityA, b.QuantityB, ROUND((a.QuantityA-b.QuantityB),1) AS Ecart
    FROM Mypmhebdo AS a, Psahebdo AS b
    WHERE 'a.Week' IS NULL 
    GROUP BY a.id, a.NomPrenom, a.Store, a.Week, a.Year, a.QuantityA, b.QuantityB
    ORDER BY a.id, a.NomPrenom, a.Store, a.Week;
    Malheureusement ça ne me revoit pas les lignes que je souhaite, en fait ça ne change rien, j'ai le même nombre de lignes en retour que si je n'avais pas ajouté cette condition.

    Je ne suis pas non plus pro du SQL, je m'y suis mis il y a quelques jours seulement, je fais de mon mieux ahah

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    t'es t il possible d'envoyer un copie de la table épurée ?
    D'autre part pourquoi as tu un UNION si tu n'as que deux tables ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Le UNION me sert à ajouter la condition visant à faire apparaitre les lignes ayant "Autre" pour valeur de colonne "Store" qui n'est présente que sur une de mes deux tables

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2013
    Messages : 328
    Points : 477
    Points
    477
    Par défaut
    Citation Envoyé par james68 Voir le message
    t'es t il possible d'envoyer un copie de la table épurée ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2016, 22h49
  2. Récupérer données sur une seule ligne
    Par ximun974 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/01/2011, 19h50
  3. affichage des données sur une seule page
    Par webdesign77 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/03/2009, 00h23
  4. Excel : consolidation de données sur une seule feuille
    Par aquamusic dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2006, 19h32
  5. [Débutant] DISTINCT sur une seule des colonnes ?
    Par Neilos dans le forum Langage SQL
    Réponses: 9
    Dernier message: 24/06/2004, 00h04

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