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

Langage SQL Discussion :

Récupérer des enregistrements "vides"


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    décembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : décembre 2018
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Récupérer des enregistrements "vides"
    Bonjour à tous,

    J'ai actuellement un problème pour récupérer des enregistrements qui ne sont pas censés être dans ma table. Je m'explique :

    J'ai une table A avec :
    [CodeClient] [NumProduit]

    J'ai une table B avec :
    [Un numéro de produit] [Une Version] [Une Date]

    Et je souhaiterais avoir tous les produits filtrés sur une version mais si je fait cela si certains produits clients on déjà une version antérieure et une date je récupère celle-ci et non pas juste pour la version que j'ai saisie.

    Mon souhait serais d'avoir un listing pour 1 version des Produits avec la première date pour cette version, Cependant si le produit n'a pas encore été commandé, il n'y a aucune version ni de date et s'il l'a déjà été il se peut qu'il y ait une version différente mais moi je souhaite trier sur 1 seule version quitte à avoir des NULL dans version et date justement.

    Et ce même si le produit 3 pour le client 2 a déjà une ligne pour la version 1.0 et une autre date

    Je récupère bien les informations mais je n'arrive pas à trier sur la version, si je trie sur la version je n'ai plus qu'une seule ligne(dans mon exemple) et si je ne trie pas sur la version je possède d'autres lignes mais pour d'autres versions qui ne m’intéressent pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT(NumProduit),ProdVersion, MIN(DateCommande)
    FROM A
    LEFT JOIN B ON A.NumProduit= B.NumProduit
    WHERE NumClient= @Client 
    GROUP BY A.NumProduit, ProdVersion
    Ce que j'ai avec cette requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [CodeClient] [NumProduit] [Version] [Date]
    1                  2                2.0         15/10
    1                  3                1.0          09/09
    Ce que je souhaite avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [CodeClient] [NumProduit] [Version] [Date]
    1                  2                2.0         15/10
    1                  3                NULL       NULL
    Les tables ont étés anonymisées, ce ne sont pas vraiment des produits que je souhaite faire ressortir, mais le concept est le même.

    Avez-vous des pistes ou des solutions à me proposer ?

    En vous remerciant,

  2. #2
    Expert éminent
    Homme Profil pro
    Responsable Datas
    Inscrit en
    janvier 2009
    Messages
    4 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Datas

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 014
    Points : 9 345
    Points
    9 345
    Par défaut
    Bonjour,
    Il suffit d'ajouter un filtre sur le numéro de version dans la jointure.

    Tatayo.

  3. #3
    Expert éminent sénior

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    5 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 5 065
    Points : 14 569
    Points
    14 569
    Billets dans le blog
    1
    Par défaut
    bonjour,

    Ce qui m'intrigue c'est de filtrer sur un critère version sans tenir compte du produit Ça a un sens fonctionnellement ?
    À un instant "t" il est a priori possible que le Produit "A" soit en version 1.0 mais e produit "B" en version 4.2 et le produit "C" en version 2.3
    Ne serait il pas plus vraisemblable de filtrer sur la dernière version ?
    Ce qui n'empêche pas de gérer les "null" en l'absence de commande.

    Note : le modèle de données est très curieux, vous parlez de commande, mais cette notion n’apparaît pas dans les tables, et le produit est directement lié au client... étrange

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    décembre 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : décembre 2018
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Problème résolu je poste ici la solution :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT(A.NumProduit), @Version AS Version, s.Date
    FROM A
    LEFT JOIN (SELECT MIN(Date) AS Date, NumProduit FROM B WHERE Version = @Version GROUP BY NumProduit) AS s ON A.KeySN = s.KeySN
    WHERE CodeClient= @Client

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

Discussions similaires

  1. Récupérer des enregistrements non utilisés
    Par Tchupacabra dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/10/2008, 16h38
  2. compter ou récupérer des champs même vides
    Par thibaud74 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 20/03/2008, 20h00
  3. Réponses: 2
    Dernier message: 09/11/2006, 08h37
  4. Réponses: 2
    Dernier message: 27/07/2006, 08h46
  5. Récupérer des enregistrements par tranche horaire
    Par olive_le_malin dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 19/05/2006, 17h53

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