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 :

Modifier l'affichage du résultat d'une requête


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut Modifier l'affichage du résultat d'une requête
    Bonjour,
    Je travaille avec Postgresql/PostGIS. Mes requêtes sont lancées à partir du SIG ESRI ArcGIS 10. Normalement, le résultat de la requête est sauvegardé comme une table dans ArcGIS.

    J'ai deux tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A(CléA, AttA1, AttA2)
    B(CléB, AttB1, AttB2, FkA)
    Suite à une requête, j’obtiens le tableau suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          AttA1    AttA2    AttB1    
          a           aa       1
          a           bb       5
          b           bb       2
          b           cc       4
          c           aa       1
          c           bb       6
          c           cc       3
    Ce que je veux c'est avoir comme résultat un tableau croisé sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          aa       bb       cc
    a    1         5        null
    b    null      2        4
    c    1         6        3
    Est-il possible d'obtenir cet affichage ?

    Cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    pensez à indiquer votre SGBD comme indiqué dans les règles d'utilisation du forum

    Les réponses étant différentes selon le SGBD.


    Et pensez à vérifier qu'il n'y a pas déjà eu ce genre de discussion sur le forum (sans exagérer 2 à 3 par mois)

    utilisez "croisé" comme mot clé par exemple .
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    C'est de la cosmétique, de la mise en forme de données, et le SQL n'est pas fait pour ça.
    C'est le rôle du langage de programmation qui interroge la base par le biais d'une requête SQL de gérer l'affichage.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Je vous remercie.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Je ne suis pas tout-à-fait d'accord avec le 100% cosmétique ce n'est pas à SQL de le faire, on n'a pas forcément une application derrière une requête et certains pivots ont parfaitement leur place au sein même de la requête.
    Je ne sais pas si c'est le cas ici, néanmoins la solution s'écrirait ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      select A.AttA1
           , sum(case A.AttA2 when 'aa' then B.AttB1 end) as "aa"
           , sum(case A.AttA2 when 'bb' then B.AttB1 end) as "bb"
           , sum(case A.AttA2 when 'cc' then B.AttB1 end) as "cc"
        from A
             inner join B
               on B.FkA = A.CléA
       where A.AttA2 in ('aa', 'bb', 'cc')
    group by A.AttA1
    order by A.AttA1 asc

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Je vous remercie Waldar pour votre proposition.
    Comment pourrais-je écrire la requête dans le cas où je connais pas le nombre de valeurs de AttA2 => je ne connais pas le nombre de colonnes du tableau résultat. Y a-til une possibilité d'écrire une boucle dans le SELECT ?
    Existe-t-il une fonction de Postgresql qui le fait ?

    Sinon comment préciser dans le cas que toutes les valeurs d'une colonne seront nulles, ne pas afficher cette colonne ?

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    La requête proposée par Waldar ne peut être utilisée que lorsqu'on connait le nombre de colonnes à retourner et les valeurs auxquelles elles correspondent.
    Dans le cas contraire, seul un programme permettra d'effectuer une telle opération.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Points : 90
    Points
    90
    Par défaut
    Est-il possible de désactiver l'affichage d'une colonne si toutes ses cases sont nulles par exemples ?

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non, SQL est un langage déclaratif, toutes les colonnes sont définies et affichées.

  10. #10
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Sans compter que le jour où il faut ajouter un nouvel AttA2 dans l'affichage, c'est la requête qu'il faut reprendre...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. Affichage des résultats d'une requête dans listbox
    Par Deallyra dans le forum VBA Access
    Réponses: 8
    Dernier message: 09/10/2007, 14h09
  2. Affichage du résultat d'une requête SQL
    Par kamikazbe dans le forum JDBC
    Réponses: 2
    Dernier message: 24/05/2007, 19h47
  3. [MySQL] Affichage des résultats d'une requête sur plusieurs pages
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/10/2006, 13h24
  4. [VBA Access]Pb affichage de résultat d'une requête
    Par BouGeTonQ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/06/2006, 18h49
  5. Affichage du résultat d'une requête paramétrée
    Par Julien Dufour dans le forum Access
    Réponses: 6
    Dernier message: 11/05/2006, 14h32

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