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
    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
    Bonjour,
    Il suffit d'ajouter un filtre sur le numéro de version dans la jointure.

    Tatayo.

  3. #3
    Expert éminent sénior
    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
    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

###raw>template_hook.ano_emploi###