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 :

Correction d'une requête


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Correction d'une requête
    Bonsoir; j'ai une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT PlanningPrévisionnel.AnneePP,BasePrestations.TypePrestation,
    COUNT(PlanningPrévisionnel.IDPJ)
    FROM  PlanningPrévisionnel INNER JOIN
                   BasePrestations ON PlanningPrévisionnel.IDPrestation = BasePrestations.IDP
    group by PlanningPrévisionnel.AnneePP, BasePrestations.TypePrestation
    ORDER BY PlanningPrévisionnel.AnneePP DESC
    elle me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2019	Etude	1
    2019	Travaux	1
    2018	Etude	6
    2018	Service	1
    y a t il un moyen d'avoir un resultat comme ca :
    annee travaux etude service
    2019 1 6 1

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Si le nombre de valeurs possibles de la colonne TypePrestation est restreint, vous pouvez utiliser une solution comme suit, basée sur des CASE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT PP.AnneePP
                  , sum(case when BP.TypePrestation='Etude'   then PP.IDPJ else 0 end) as etudes 
                  , sum(case when BP.TypePrestation='Travaux' then PP.IDPJ else 0 end) as travaux
                  , sum(case when BP.TypePrestation='Service' then PP.IDPJ else 0 end) as service
    FROM  PlanningPrévisionnel as PP
    INNER JOIN
          BasePrestations as BP
       ON BP.IDP=PP.IDPrestation 
    group by PP.AnneePP
    ORDER BY PP.AnneePP DESC
    Si au contraire il y a un grand nombre de valeurs possibles, il faut utiliser une fonction de PIVOT, malheureusement pas implémentée sur tous les SGBD

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    exactement j'en ai que 3

    quand j'exécute la requete il me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*245, Niveau*16, État*1, Ligne*2
    Échec de la conversion de la valeur varchar '104138fa-36d0-40e4-be0b-266c2103af5c' en type de données int.

    c'est le premier IDPJ dans planningprevisionnel

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Pardon j'ai été un peu vite en besogne, il faut faire la somme du nombre de cas, remplacez IDPJ par 1

    Exemple, avec ce jeu d'essais :

    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
       with cte1 (xCCAA, XSERV) as    
           (select '2015', 'etude  '  
            union all                 
            select '2015', 'travaux'  
            union all                 
            select '2015', 'etude  '  
            union all                 
            select '2016', 'service'  
            union all                 
            select '2016', 'etude  '  
            union all                 
            select '2016', 'etude  '  
            union all                 
            select '2015', 'service'  
            union all                 
            select '2017', 'travaux'  
            union all                 
            SELECT '2015', 'etude  '  
    )
    Et cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       SELECT XCCAA                                                       
            , SUM(CASE WHEN XServ='service' THEN 1 ELSE 0 END) AS Service 
            , SUM(CASE WHEN Xserv='travaux' then 1 ELSE 0 END) AS Travaux 
            , SUM(CASE WHEN Xserv='etude  ' then 1 ELSE 0 END) AS Etude   
       FROM CTE1                                                          
       GROUP BY xccaa                                                     
       order BY xccaa
    On obtient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    XCCAA     SERVICE     TRAVAUX       ETUDE 
    2015            1           1           3 
    2016            1           0           2 
    2017            0           1           0

  5. #5
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci mon probleme est resolu.

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

Discussions similaires

  1. Correction d'une requête qui affiche un pourcentage
    Par doudou2015 dans le forum Langage SQL
    Réponses: 23
    Dernier message: 05/06/2015, 02h00
  2. Correction d'une requête
    Par CLion dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/05/2015, 10h35
  3. correction d'une requête (jpa ql)
    Par chflb dans le forum JPA
    Réponses: 11
    Dernier message: 17/08/2008, 18h16
  4. Besoin d'une correction sur une requête
    Par Nessie37 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/12/2007, 18h47
  5. [MySQL] Afficher une date correctement après une requête
    Par Nerva dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/04/2006, 16h27

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