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

SQL Oracle Discussion :

Récupérer le contenu d'un champ pour les lignes précédentes


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut Récupérer le contenu d'un champ pour les lignes précédentes
    Bonjour,

    J'ai la table suivante :
    Nom : 1.png
Affichages : 214
Taille : 12,9 Ko

    Et je voudrais obtenir le résultat suivant au niveau de la colonne "Type" :
    Nom : Résultat.JPG
Affichages : 201
Taille : 54,8 Ko

    Pour un même produit, je dois récupérer le contenu du champ type pour tous les codes <= au code renseigné.

    Auriez-vous une idée de comment obtenir cela svp ?

    Merci d'avance.

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Bonjour,

    Je suppose que lignes que tu veux compléter sont celles pour lesquelles type est NULL. Tu peux faire une requête de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with t1 as (select produit, 
                            code, 
                            type,
                            count(type) over (partition by produit order by code) cnt
                    from t
                   )
    select produit,
             code,
             nvl(type, max(type) over (partition by produit order by cnt range between 1 following and 1 following)) type
    from t1;

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Je viens de tester et ça fonctionne parfaitement bien !

    Merci beaucoup.
    Bonne journée.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pour le coup il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select produit, code
           , last_value(type ignore nulls) over(partition by produit order by code desc) as type
        from t
    order by produit, code;

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    Hmm non cela ne marche pas.
    Au lieu de compléter mes lignes vides qui sont inférieurs ou égales à mon champ "Code", cela les complète dans l'autre sens, en prenant les codes >=.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous avez bien vu que le tri est descendant pour le code dans la fonction last_value ?

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    oui oui j'ai fait exactement comme vous

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    with t (produit, code, type) as
    (
    select 'Produit 1',  1, cast(null as varchar2(6)) from dual union all
    select 'Produit 1',  2, null     from dual union all
    select 'Produit 1',  3, null     from dual union all
    select 'Produit 1',  4, 'Type 1' from dual union all
    select 'Produit 1',  5, null     from dual union all
    select 'Produit 1',  6, null     from dual union all
    select 'Produit 1',  7, null     from dual union all
    select 'Produit 1',  8, null     from dual union all
    select 'Produit 1',  9, 'Type 2' from dual union all
    select 'Produit 1', 10, null     from dual union all
    select 'Produit 1', 11, null     from dual union all
    select 'Produit 1', 12, 'Type 3' from dual union all
    select 'Produit 1', 13, null     from dual union all
    select 'Produit 1', 14, null     from dual union all
    select 'Produit 2',  1, null     from dual union all
    select 'Produit 2',  2, null     from dual union all
    select 'Produit 2',  3, null     from dual union all
    select 'Produit 2',  4, null     from dual union all
    select 'Produit 2',  5, 'Type 2' from dual union all
    select 'Produit 2',  6, null     from dual union all
    select 'Produit 2',  7, null     from dual union all
    select 'Produit 2',  8, 'Type 3' from dual union all
    select 'Produit 2',  9, null     from dual union all
    select 'Produit 2', 10, null     from dual union all
    select 'Produit 2', 11, null     from dual
    )
    select produit
         , code
         , last_value(type ignore nulls) over(partition by produit order by code desc) as type
      from t
    order by produit asc
           , code    asc;
     
    PRODUIT    CODE  TYPE
    ---------  ----  ------
    Produit 1     1  Type 1
    Produit 1     2  Type 1
    Produit 1     3  Type 1
    Produit 1     4  Type 1
    Produit 1     5  Type 2
    Produit 1     6  Type 2
    Produit 1     7  Type 2
    Produit 1     8  Type 2
    Produit 1     9  Type 2
    Produit 1    10  Type 3
    Produit 1    11  Type 3
    Produit 1    12  Type 3
    Produit 1    13
    Produit 1    14
    Produit 2     1  Type 2
    Produit 2     2  Type 2
    Produit 2     3  Type 2
    Produit 2     4  Type 2
    Produit 2     5  Type 2
    Produit 2     6  Type 3
    Produit 2     7  Type 3
    Produit 2     8  Type 3
    Produit 2     9
    Produit 2    10
    Produit 2    11

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Décembre 2017
    Messages : 66
    Points : 39
    Points
    39
    Par défaut
    J'ai une utilisé dans un sous-select comme je passe par une simple requête... c'est peut-être ça le problème... !

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 137
    Points : 1 917
    Points
    1 917
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pour le coup il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select produit, code
           , last_value(type ignore nulls) over(partition by produit order by code desc) as type
        from t
    order by produit, code;
    Oui bien joué. Je l'avais oubliée celle là, last_value avec la possibilité d'ignorer les nulls.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2017, 15h58
  2. Réponses: 4
    Dernier message: 06/08/2012, 15h49
  3. Réponses: 9
    Dernier message: 08/07/2012, 18h36
  4. Réponses: 2
    Dernier message: 14/02/2006, 14h59
  5. Récupérer le contenu d'un champs pour un calcul ?
    Par dark_vidor dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/01/2006, 10h25

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