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

Requêtes et SQL. Discussion :

Calculer un champ et l'afficher sur colonnes


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Calculer un champ et l'afficher sur colonnes
    Bonjour,

    J'ai une table Personne (Id_Personne, Nom_Personne, Prénom_Personne, Compétence_Personne, Etablissement)

    Je tente de compter le nombre de compétences et de les afficher en colonnes.

    Par exemple :

    Id_Personne Nom_Personne Prénom_Personne Compétence_Personne Etablissement
    1 Durant Daniel Réseaux Tours
    2 Dumont Michelle Systèmes Lyon
    3 Lefèvre Julia SGBD Paris
    4 Jackson Michael Systèmes Lyon

    J'aimerai obtenir ce résultat :
    Etablissement Réseaux Systèmes SGBD
    Lyon 0 2 0
    Paris 0 0 1
    Tours 1 0 0


    Merci pour votre aide.

  2. #2
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 133
    Points : 83 972
    Points
    83 972
    Billets dans le blog
    15
    Par défaut


    Quelque chose comme ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TRANSFORM Nz(Count(T_Personne.Id_Personne),0) AS CompteDeId_Personne
    SELECT T_Personne.Etablissement
    FROM T_Personne
    GROUP BY T_Personne.Etablissement
    PIVOT T_Personne.Competence;

    Le résultat te donne :

    Nom : Sans titre.png
Affichages : 192
Taille : 14,0 Ko
    Base de test téléchargeable :
    Fichiers attachés Fichiers attachés
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 73
    Points : 160
    Points
    160
    Par défaut Intervention
    Salut Mauricianstyle#,

    Comment tu le vois le code milkoseck# peut t'aider en environnement idoine ceci dit il serait plus précis si tu avais précis ton sgbd
    par la suite tu auras une requête plus concise. Sinon de manière classique tu peux jongler un peu quelques "case..when":

    Par exemple, en une seule requête :
    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
    23
    24
    25
    26
    27
    28
    29
    30
     
    SELECT DISTINCT t1.Etablissement,
      CASE 
        WHEN t1.Competence_Personne='Réseaux'
        THEN
          (SELECT COUNT(1)
          FROM Personne t2
          WHERE t2.Competence_Personne='Réseaux' AND t2.Etablissement=t1.Etablissement
          )
        ELSE 0
      END Réseaux,
      CASE 
        WHEN t1.Competence_Personne='Systèmes'
        THEN
          (SELECT COUNT(1)
          FROM Personne t2
          WHERE t2.Competence_Personne='Systèmes' AND t2.Etablissement=t1.Etablissement
          )
        ELSE 0
      END Systèmes,
      CASE 
        WHEN t1.Competence_Personne='SGBD'
        THEN
          (SELECT COUNT(1)
          FROM Personne t2
          WHERE t2.Competence_Personne='SGBD' AND t2.Etablissement=t1.Etablissement
          )
        ELSE 0
      END SGBD
    FROM Personne t1;
    J'espère que ça va te donner quelque chose

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses, j'ai testé avec "WHEN...CASE" j'ai un message "Erreur de syntaxe (opérateur absent)". Je suis sur un ACCESS 2010.

    Avec TRANSFORM ... PIVOT" cela fonctionne, est il possible de faire en sorte d'associer le SGBD et Système de cette manière :

    Etablissement Réseaux Autres
    Lyon 0 2
    Paris 0 1
    Tours 1 0

    Merci pour votre aide.

  5. #5
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2009
    Messages : 73
    Points : 160
    Points
    160
    Par défaut Exploite la précédente
    En te basant sur la dynamique croisée, tu gardes [Réseaux] et additionne les deux [SGBD] et [Systeme] avec comme alias "Autres".

    J'espère qu'il n'y aura pas lieu de faire une conversion de type -> number !!

  6. #6
    Candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je l'ai fait en 3 requêtes, je n'ai pas réussi à le faire en me basant sur la requête croisée.
    J'aimerai savoir comment le faire.

    Merci pour votre aide.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/01/2011, 15h14
  2. [MySQL] Associer deux champs et les afficher sur une page
    Par dreamquad dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 14/04/2009, 13h40
  3. Colonne de calcul à afficher sur un graph
    Par Hanae dans le forum BIRT
    Réponses: 4
    Dernier message: 16/07/2007, 14h29
  4. [TDrawGrid]Comment afficher une colonne sur quatre ?
    Par Laurent Dardenne dans le forum Composants VCL
    Réponses: 5
    Dernier message: 11/02/2006, 16h42
  5. [XSL FO] afficher template sur colonnes alternativement
    Par elzedo dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 29/06/2005, 12h53

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