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

Requêtes MySQL Discussion :

Transformer des lignes en colonnes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 28
    Points
    28
    Par défaut Transformer des lignes en colonnes
    Bonjour,

    Pour maintenir une base de donnée de client avec un historique de toutes les modifications, actuellement, j'ai :
    IDclient|valeur1|valeur2|valeur3|valeurN|date_modif

    A chaque modification, je crée une nouvelle ligne avec les valeurs actuelles. Le problème est que le volume de donnée devient important et toutes les opérations sur la table sont de plus en plus longues.


    Je veux modifier via une structure comme celle-ci :

    Table1 : IDclient|nom
    Table2 : IDclient|IDdelavaleur|lavaleur|datedebutvalidite|datefinvalidite
    Table3 : IDvaleur|nomcourt
    (j'ai réduit les tables à leur minimum pour ma question).


    Je veux ensuite récupérer toute les valeurs pour chaque client en une seule ligne mais en plus avoir l'historique (donc faire une vue pour qu'il m'affiche la même chose que j'ai dans ma table actuelle)


    La Table3 me sert à définir toutes les valeurs possible (en sachant qu'une valeur peut ne pas exister). Elle sert dans mon application mais à priori ne peut pas être utilisé directement pour générer la VUE que j'attends.




    Actuellement, j'ai trouvé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Table1.IDclient, Table1.Nom, Table2a.lavaleur as nomcourtA, Table2b.lavaleur as nomcourtB (etc)
    FROM Table1
    LEFT OUTER JOIN Table2 as Table2a ON Table1.IDclient = Table2a.IDclient AND Table2a.idType = a
    LEFT OUTER JOIN Table2 as Table2b ON Table1.IDclient = Table2b.IDclient AND Table2b.idType = b
    Ca me sort quelque chose de presque convenable mais je n'arrive pas à ordonner de manière à n'avoir qu'une seule ligne pour chaque date_start de chaque client (puis à trier par ordre croissant des date_end).


    Sauriez-vous m'aider ? Est-ce que la structure de ma nouvelle table est vraiment rationnelle ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé une solution !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT Table1.IDclient, Table1.Nom, Table2a.lavaleur AS nomcourtA, Table2b.lavaleur AS nomcourtB, GREATEST(COALESCE(Table2a.datedebutvalidite,0), COALESCE(Table2b.datedebutvalidite,0)) as Fstart_date, LEAST(COALESCE(Table2a.datefinvalidite,0), COALESCE(Table2b.datefinvalidite,0)) as Fend_date
    FROM Table1
    LEFT OUTER JOIN Table2 AS Table2a ON Table1.IDclient = Table2a.IDclient AND Table2a.idType = a
    LEFT OUTER JOIN Table2 AS Table2b ON Table1.IDclient = Table2b.IDclient AND Table2b.idType = b
     WHERE GREATEST(COALESCE(Table2a.datedebutvalidite,0), COALESCE(Table2b.datedebutvalidite,0)) < LEAST(COALESCE(Table2a.datefinvalidite,0), COALESCE(Table2b.datefinvalidite,0))
    GROUP BY Fend_date, Fstart_date
    ORDER BY Fstart_date DESC, Fend_date DESC

    Mais reste toujours ma question de savoir si c'est rationnel de placer les choses comme ça. Vous voyez comment optimiser ?

Discussions similaires

  1. Transformer des lignes en colonnes
    Par mahis_ dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 01/07/2013, 13h41
  2. Requête SQL, transformer des lignes en colonne
    Par gadget2 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/11/2010, 20h50
  3. [Datastage Server 7.5] Transformer des lignes en colonnes
    Par alpachico dans le forum DataStage
    Réponses: 1
    Dernier message: 10/07/2009, 16h25
  4. Transformer des lignes en colonne DataStage
    Par bnet2 dans le forum DataStage
    Réponses: 4
    Dernier message: 09/12/2008, 10h07
  5. Transformer des lignes en colonnes
    Par ofinot dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 30/07/2008, 11h45

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