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

Contribuez PostgreSQL Discussion :

Dupliquer les lignes d'une table en fonction d'une valeur d'un champ [9.3]


Sujet :

Contribuez PostgreSQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2014
    Messages : 20
    Points : 24
    Points
    24
    Par défaut Dupliquer les lignes d'une table en fonction d'une valeur d'un champ
    Bonjour,

    J'aimerais créer une vue qui duplique les lignes de ma table en fonction de la valeur dans autre champ dans cette même table.

    Par exemple:
    Ma table contient:
    colonne 1= id ; colonne 2 = nb dans le groupe ; colonne 3 = distance
    1 ; 3 ; 205
    2 ; 1 ; 60
    3 ; 2 ; 350

    Du coup, l'idée c'est que ma requête automatique me renvoie dans une vue :
    ligne 1: la colonne 2 contient la valeur 3, tu copies trois fois la ligne correspondante dans la vue,
    ligne 2: la colonne 2 contient la valeur 1, tu copies une fois la ligne correspondante dans la vue
    ligne 3: la colonne 2 contient la valeur 2, tu copies deux fois la ligne correspondante dans la vue

    C'est le même problème que ple2415, sur la discussion suivante :
    http://www.developpez.net/forums/d78...tion-d-champs/

    Mais je n'ai pas compris comment mettre en place la solution proposée par estofilo...

    Est-ce que cette demande est réalisable? Quelqu'un peut-il me guider sur la marche à suivre?

    Je vous remercie par avance de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 346
    Points : 27 202
    Points
    27 202
    Par défaut
    Il suffit d'une jointure avec une liste de nombres...
    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
    WITH    liste
    AS  (   SELECT  1   AS num
        UNION
            SELECT  2
        UNION
            SELECT  3
        UNION
            SELECT  4
        ...
        )
    SELECT  tbl.id
        ,   tbl.distance
        ,   lst.num
        ,   tbl.nb
    FROM    matable tbl
        INNER JOIN
            liste   lst   
            ON  lst.num <= tbl.nb
    ;
    Si le besoin revient souvent, la liste de nombres pourra utilement être stockée dans une table.

    PS : Il n'y a pas de champs dans une table, mais des colonnes.
    PPS : Champ ne prend pas de 's' au singulier.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    mars 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2014
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    ça fonctionne parfaitement!
    Merci

    PS: les fautes ont été corrigées

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/06/2015, 14h22
  2. Réponses: 2
    Dernier message: 27/08/2014, 09h49
  3. Réponses: 2
    Dernier message: 30/08/2009, 20h42
  4. Réponses: 4
    Dernier message: 04/08/2009, 13h12
  5. Réponses: 2
    Dernier message: 20/12/2008, 08h51

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