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

MS SQL Server Discussion :

Transformer 1COL/xLIGNE en xCOL/1LIGNE


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Par défaut Transformer 1COL/xLIGNE en xCOL/1LIGNE
    Bonjour,

    J'ai une requete1 qui me retourne une colonne, mais un nombre variable de lignes suivant une condition du where... Je dois intégrer cette requete1 dans une autre, bcp plus grosse : requete2. De plus, les différentes lignes retournées dans requete1 doivent devenir des colonnes dans requete2. là est mon problème, car j'en ai beaucoup...

    Je connais une technique pour des petites requêtes. Mais je me demande s'il n'existe pas quelque chose de plus simple genre un fonction "line2column" a donner dans le SELECT?

    Actuellement, dans ma requete1, j'ajoute une colonne "ROWNUM", dans laquelle j'ajoute un numéro de ligne.

    Ensuite dans requete2 je fais plein de jointures "LEFT OUTER JOIN" en filtrant chaque fois un numéro de lignes. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LEFT OUTER JOIN (REQUETE1) R1 ON R1.ARTICLE=REQUETE2.ARTICLE AND REQUETE1.ROWNUM=1
    LEFT OUTER JOIN (REQUETE1) R2 ON R1.ARTICLE=REQUETE2.ARTICLE AND REQUETE1.ROWNUM=2 
    LEFT OUTER JOIN (REQUETE1) R3 ON R1.ARTICLE=REQUETE2.ARTICLE AND REQUETE1.ROWNUM=3 
    LEFT OUTER JOIN (REQUETE1) R4 ON R1.ARTICLE=REQUETE2.ARTICLE AND REQUETE1.ROWNUM=4
    ...
    En sachant que REQUETE1 est déjà énorme... J'ai bien 15 "UNION" dedans. Et que je dois retourner 50 colonnes de requete1 dans requete2. Ca fait beaucoup de code pour le résultat souhaité.

    Connaissez-vous une façon plus simple ?


    Merci d'avance.

    Nico

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 63
    Par défaut
    J'ai trouvé une solution.

    à toutes fins utiles :

    Dans requete2, j'ai intégré une seule fois requete1 avec un "LEFT OUTER JOIN" et en numérotant chaque ligne.

    Ensuite dans le SELECT de requete2, je filtre la colonne ROWID et n'affiche le contenu de la colonne qui m'intéresse, que si le ROWID=1, 2, 3,... avec un CASE.

    Puis ajouter un max() sur chaque colonne sortie pour n'avoir plus qu'une seule ligne.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ARTICLE, 
    MAX(CASE WHEN ROWID=1 THEN CODE ELSE '' END) AS COL1,
    MAX(CASE WHEN ROWID=2 THEN CODE ELSE '' END) AS COL2,
    MAX(CASE WHEN ROWID=3 THEN CODE ELSE '' END) AS COL3,
    ...
    LEFT OUTER JOIN (REQUETE1) R1 ON R1.ARTICLE = REQUETE2.ARTICLE



    Merci google
    En cherchant avec les bons mots, on trouve toujours...

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

Discussions similaires

  1. [PERL] transformation de fichier
    Par bob20000 dans le forum Langage
    Réponses: 6
    Dernier message: 27/07/2006, 11h13
  2. transformer un fichire Xml en pdf
    Par SuperFoustan dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 21/02/2003, 11h45
  3. transformer un jour en JJ/MM/AA
    Par gemini_010 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 08/11/2002, 22h55
  4. Transformer un caractère en type énuméré
    Par HT dans le forum Langage
    Réponses: 3
    Dernier message: 22/10/2002, 20h46
  5. FFT(Fast Fourier Transform)
    Par IngBen dans le forum Traitement du signal
    Réponses: 6
    Dernier message: 23/05/2002, 16h35

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