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 - Passer lignes en colonnes


Sujet :

Langage SQL

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut SQL - Passer lignes en colonnes
    Bonjour,

    j'essaye de transposer des lignes en colonnes dans une requête SQL. J'ai fait des recherches et ai trouvé cette réponse que j'ai du mal à comprendre (l'intérêt de la jointure par exemple), d'autant que le lien vers l'explication cité dans le message n'est plus valide.

    J'ai une table avec plusieurs entrées en lignes que j’aimerais transposer en colonnes, rien de bien compliqué à priori.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    id    valeur
    1    10
    2    20
    3    30
    4    40
    5    50
    L'affichage que je souhaite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    valeur_10    valeur_20    valeur_30    valeur_40    valeur_50
    1             2             3             4            5
    Quand je fais cette requête j'ai toujours du multi-ligne. Des idées et/ou explications ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT
        CASE WHEN valeur = 10 THEN 1 END AS valeur_10,
        CASE WHEN valeur = 20 THEN 2 END AS valeur_20,
        CASE WHEN valeur = 30 THEN 3 END AS valeur_30,
        CASE WHEN valeur = 40 THEN 4 END AS valeur_40,
        CASE WHEN valeur = 10 THEN 5 END AS valeur_50
    FROM matable
    GROUP BY valeur
    ORDER BY valeur
    Merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 371
    Par défaut
    Bonjour,
    L'intérêt de la jointure dans l'autre discussion vient du fait qu'il y avait plusieurs tables concernées par la requête.
    Dans ta requête, le GROUP BY ne sert à rien car il n'y a pas d'agrégation. Tu n'indiques pas non plus le SGBD concerné.

    Tu peux toujours faire ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    select sum(valeur_10),sum(valeur_20),sum(valeur_30),sum(valeur_40),sum(valeur_50)
    from
    (
    SELECT
        CASE WHEN valeur = 10 THEN 1 else 0 END AS valeur_10,
        CASE WHEN valeur = 20 THEN 2 else 0 END AS valeur_20,
        CASE WHEN valeur = 30 THEN 3 else 0 END AS valeur_30,
        CASE WHEN valeur = 40 THEN 4 else 0 END AS valeur_40,
        CASE WHEN valeur = 10 THEN 5 else 0 END AS valeur_50
    FROM matable
    )

    C'est un peu moche, mais ça fonctionne.

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    Merci de cette réponse qui fonctionne très bien. J'utilise phppgadmin. Pour être bien, la sous requête doit être nommée.

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'ai une table avec plusieurs entrées en lignes que j’aimerais transposer en colonnes
    Ce que vous cherchez à faire est de la cosmétique. Ce n'est pas le boulot du SGBD mais celui de l'application qui présente les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
        CASE WHEN valeur = 10 THEN 1 END AS valeur_10,
        CASE WHEN valeur = 20 THEN 2 END AS valeur_20,
        CASE WHEN valeur = 30 THEN 3 END AS valeur_30,
        CASE WHEN valeur = 40 THEN 4 END AS valeur_40,
        CASE WHEN valeur = 10 THEN 5 END AS valeur_50
    FROM matable
    GROUP BY valeur
    ORDER BY valeur
    Je ne vois pas trop l'intérêt de la requête qui présuppose que la valeur 10 est associée à l'id 1, 20 à l'id 2...

    Si vous cherchez à obtenir le nombre de fois qu'il y a la valeur 10, la valeur 20... faites plutôt ce genre de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT valeur, COUNT(*) AS nombre
    FROM latable
    GROUP BY valeur
    Vous aurez le résultat en autant de lignes qu'il y a de valeurs et le programme applicatif pourra ensuite mettre le résultat en colonne si ça vous chante.

    Si vous n'avez vraiment que ces id associés à ces valeurs dans la table, faites simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT id, valeur
    FROM latable
    Si vous tenez absolument à faire votre passage en colonne en SQL, alors la moche solution de Tatayo est valable.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Mai 2014
    Messages : 33
    Par défaut
    Oui c'est "cosmétique". Là j'ai mis un exemple simple pour bien comprendre la syntaxe, dans mon cas réel c'est autrement plus compliqué et contient des jointures entre tables et schémas, des sommes, des calculs de surfaces, des conversions de type, des regroupements...

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

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. [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
  3. [DB2/SQL] Passer une colonne de NULL à NOT NULL
    Par tux2005 dans le forum DB2
    Réponses: 6
    Dernier message: 08/06/2007, 22h57
  4. sql convertir ligne en colonne
    Par beaufils dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/12/2006, 18h39
  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