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 :

sql convertir ligne en colonne


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5
    Points : 3
    Points
    3
    Par défaut sql convertir ligne en colonne
    Bonjour
    Je n'ai pas SQL2005 et
    Voici ma table
    PAT TYPE ETAT DATE
    757 S C 07/12/2006
    757 S P 06/12/2006
    757 A P 05/12/2006
    757 M P 04/12/2006

    ET JE VOUDRAIS

    PAT TYPE 04/12/2006 05/12/2006/ 06/12/2006 07/12/2006
    757 S NULL NULL P C
    757 A NULL P NULL NULL
    757 M P NULL NULL NULL

    MERCI
    T

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Question régulièrement posée, pour laquelle la réponse reste :
    La clause PIVOT utilisée par Microsoft dans ACCESS ou SQL Server n'est pas une fonctionnalité conforme au standard SQL.
    La simulation d'une telle commande nécessiterait l'écriture de code SQL dynamique, c'est à dire une requête qui va décrire la requête à exécuter.
    Par ailleurs, cette mise en forme correspond à un besoin d'affichage (cosmétique) et peut (doit) donc être prise en charge par la couche correspondante de l'application.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    En clair, ça veut dire que ce genre de requête, bien que a priori faisable par SQL, est très gourmande en ressources, donc à proscrire et que cette cosmétique peut très bien être faite par un programme d'application qui récupère les données en colonne et s'aide d'un curseur SQL pour placer les données en ligne.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Si tu souhaites réellement passer par le SQL, voici un exemple :
    A partir de la table mytable (myrow, mycol, myval)myrow est l'identifiant de la ligne, mycol l'identifiant de la colonne et myval la valeur qui doit être regroupée dans la cellule, il faut récupérer le résultat de la requête suivante et l'exécuter pour obtenir un tableau croisé :
    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
     
    select case when cols.name = bounds.inf 
         then 'select myrow' 
         else '' 
        end
       , ', sum(case when mycol = ''' || cols.name 
        || ''' then myval else 0 end) as ' || cols.name
       , case when cols.name = bounds.sup
         then ' from mytable group by myrow;' 
         else '' 
        end
    from
       ( select min(mycol) as inf
           , max(mycol) as sup
        from  mytable
       ) as bounds
     cross join
       ( select mycol as name
        from  mytable
        group by mycol
       ) as cols
    ;
    Le nombre de colonnes et leur identifiant n'étant pas connus à l'avance, il n'est pas possible de prévoir la structure de cette requête.

Discussions similaires

  1. [AC-2007] probleme de requete sql transposer ligne et colonne
    Par nicogef dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2015, 19h38
  2. Convertir lignes en colonnes
    Par Euseibus dans le forum SAS Base
    Réponses: 3
    Dernier message: 01/10/2007, 10h48
  3. [SQL] Remplir une base SQL à partir d'un tableau à plusieurs lignes et colonnes
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/08/2007, 08h56
  4. [Access SQL]Requetes SQL pour "inverser" ligne et colonne
    Par trihanhcie dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/07/2007, 13h12
  5. [T-SQL] Convertir des lignes en colonne
    Par cortex93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/12/2005, 16h17

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