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 :

Transposer des lignes en colonnes


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut Transposer des lignes en colonnes
    Bonjour à tous,

    On vient de me soumettre une requête à modifier et je m'interroge sur la possibilité ou non résoudre ce problème.

    Voici un schéma représentant le besoin :

    Retour requête actuelle :
    Col1 Col2 Col3 Line_nbr Montant Facture
    xx xx xx 1 140 0011
    xx xx xx 1 500 0022
    yy yy yy 2 1000 0023
    yy yy yy 2 2500 0052

    Objectif :
    Col1 Col2 Col3 Line_nbr Montant1 Montant2 Facture1 Facture2
    xx xx xx 1 140 500 0011 0022
    yy yy yy 2 1000 2500 0023 0052

    En gros, si je prends la ligne 1 par exemple (Line_nbr=1), j’ai deux lignes dans le résultat parce que j’ai deux factures différente pour cette ligne.
    Le but est de garder une seule ligne et rajouter des colonnes pour les champs montant et facture.

    Après des recherche sur le net j'ai trouvé la fonction PIVOT, mais celle ci ne marche pas pour mon cas, celle-ci doit utiliser une fonction comme COUNT ou SUM pour être utiliser.

    Cela me semble infaisable , mais si quelqu'un à une idée je serai reconnaissant

    Merci d'avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Si la clause PIVOT te permettra de faire cela, même si elle oblige à utiliser une fonction d'agrégation. Par contre elle n'est pas dynamique, tu dois déjà savoir combien de colonnes il te faut. Est-ce le cas?
    Quelle est ta BDD?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Différentes solutions sont expliquées ici : https://fadace.developpez.com/mssql/pivot/

  4. #4
    Membre éclairé Avatar de hammag
    Profil pro
    Inscrit en
    Février 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 511
    Par défaut
    Bonjour,

    Base Oracle.
    Concernant la fonction PIVOT, ce que je ne comprends pas c'est comment transposer les valeurs du champ en colonne, dans le tuto mentionné dans le post de escartefigue, dans la colonne Année il y'a quatre valeurs (2003, 2004, 2005, 2006).
    Ces cinq valeurs ont été transposées en quatre colonnes avec la commande Pivot.

    Pour mon cas, si je prends par exemple le champ "Facture" il y'a plusieurs valeurs (jusqu'à l'infini), impossible de transposer chaque valeur de facture en une colonne.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Si tu as des valeurs variables à pivoter alors c'est compliqué. Tu n'y arriveras pas en utilisant PIVOT qui nécessite un nombre fixe de colonnes. Il faut faire du sql dynamique.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour,

    Pour être sur de bien comprendre :
    Vous pourriez donc avoir une trsoiéme ligne correspondant aux trois première (avec facture = 0033 par exemple). Est-ce bien le cas ?
    si oui, dans ce cas, quel devrait être le résultat ? une colonne montant et une colonne facture supplémentaire ? avec des NULL pour Facture3 et Montant3 pour le deuxième "groupe de lignes " ?

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

Discussions similaires

  1. Transposer des lignes en colonnes
    Par MelaAllIn dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 05/04/2018, 15h14
  2. Transposer des lignes en colonnes
    Par moustache78500 dans le forum SAS Base
    Réponses: 5
    Dernier message: 21/09/2015, 16h30
  3. Transposer des lignes en colonnes
    Par EternalNod dans le forum BIRT
    Réponses: 1
    Dernier message: 08/10/2013, 17h19
  4. Transposer des lignes en colonnes
    Par sniper75 dans le forum SAS Base
    Réponses: 6
    Dernier message: 08/10/2012, 13h11
  5. transposer des lignes en colonnes
    Par Zet dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/10/2009, 20h05

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