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

Langage SQL Discussion :

Compléter des null dans une table sans fonction analytique ?!


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 49
    Points
    49
    Par défaut Compléter des null dans une table sans fonction analytique ?!
    Bonjour à tous,

    J'aimerai vous solliciter car je sèche un peu sur un problème.

    Je cherche à faire de manière optimale avec des opérations simples (jointures, je ne peux utiliser de fonctions analytiques car mon moteur ne le supporte pas aujourd'hui) le calcul suivant :

    Table Stock :
    Date Magasin Stock
    0101 1 3
    0201 1 null
    0301 1 null
    0401 1 null
    0501 1 2
    0601 1 3

    Deviendrait :

    Table Stock_complete :
    Date Magasin Stock
    0101 1 3
    0201 1 3
    0301 1 3
    0401 1 3
    0501 1 2
    0601 1 3


    En fait si je n'ai pas de variation de stock dans ma table, alors c'est qu'il n'y a pas eu de mouvement et aucune donnée n'est entrée pour une date donnée. Pour pouvoir effectuer des calculs, j'ai besoin d'avoir une table stock complète et avec le dernier stock connu qui vient remplacer une valeur null.

    Une idée de comment m'y prendre pour réaliser ce calcul de manière la plus optimale possible ?

    Un grand merci pour votre lecture,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 157
    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 : 10 157
    Points : 38 965
    Points
    38 965
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Comme ça :

    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
    16
    update tab_stock T1
    Set T1.stock =
                (select T2.stock
                 from tab_stock T2
                 where T2.date   <= T1.date
                   and T2.magasin = T1.magasin
                   and T2.stock is not null
                   and not exists
                      (select 1
                       from tab_stock T3
                       where T3.magasin = T1.magasin
                         and t3.date    > T2.date
                         and T3.date   <= T1.date
                         and T3.stock is not null
                      )
                )
    Je ne sais pas s'il peut y avoir plusieurs lignes par date pour un même magasin, si c'est le cas, il faut ajouter une clause pour ne récupérer qu'une seule ligne.
    La syntaxe dépend du SGBD (Top 1, limit 1, fetch first 1 row only, etc...)

Discussions similaires

  1. Récupérer des données dans une table en fonction de l'heure
    Par guigui2454000 dans le forum Débuter
    Réponses: 6
    Dernier message: 04/12/2013, 11h01
  2. Réponses: 2
    Dernier message: 04/10/2011, 15h55
  3. Réponses: 3
    Dernier message: 19/03/2009, 01h07
  4. [Tableaux] Insérer des NULL dans une table
    Par jerem_orga dans le forum Langage
    Réponses: 5
    Dernier message: 03/01/2007, 17h22

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