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

MS SQL Server Discussion :

Group By, CASE et Sommes


Sujet :

MS SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Group By, CASE et Sommes
    Hello à tous.
    Je dois interroger une base de données et formater le résultat en changeant les labels et en effectuant des sommes.

    Par exemple, sur la requete ci dessous :
    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
     
    Select
    	case 
    		-- Renommage des pays ---
    		when country = 'France' then 'FR'
    		when country IN ('Austria','Germany','Switzerland') then 'DE'
    		when country IN ('Belgium','Denmark','Ireland','Sweden') then 'ROE'
    		when country = 'Italy' then 'IT'
    		when country = 'Netherlands' then 'NL'
    		when country = 'Spain' then 'ES'
    		when country = 'United Kingdom' then 'UK'
    		else 'N/A'
    	end as 'Country',
    	count(*) 'Count'
    From 	
    	ma_table
    Where 
    	country IN ( 
    	'Austria','Belgium','Denmark','France','Germany','Ireland','Italy','Netherlands','Spain','Sweden','Switzerland','United Kingdom'
    	)
    Group by country
    j'obtiens ce genre de réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    DE	20321
    ROE	42799
    ROE	15473
    FR	280692
    DE	212246
    ROE	9335
    IT	77449
    NL	53281
    ES	99064
    ROE	32094
    DE	75391
    UK	214727
    Sauf que je voudrais que toutes les lignes ayant le meme label soient ajoutées.
    ex, pour ROE, on devrait avoir 42799+15473+9335+32094

    Quelqu'un sait-il comment je peux m'en sortir?

    merci d'avance

  2. #2
    Membre habitué Avatar de PierreDelcroix
    Profil pro
    Inscrit en
    Février 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 90
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 86
    Points : 192
    Points
    192
    Par défaut
    La réponse est relativement simple.

    Créez un tableau, ajoutez les données ( Pays + abréviation ) et faites un JOIN.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    désolé mais je n'ai pas compris votre réponse.
    Comment pourrais je m'y prendre, en une seule requete, pour avoir le résultat que je souhaite?

    merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    La solution la plus propre est comme te l'a indiqué PierreDelcroix de créer une table de GroupementPays de structure country, groupe_pays.
    et de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
    	groupe_pays 
    	count(*) 'Count'
    FROM 	
    	ma_table inner join Groupement_Pays  
    		on ma_table.country=Groupement_Pays.country
    WHERE 
    	ma_table.country IN ( 
    	'Austria','Belgium','Denmark','France','Germany','Ireland','Italy','Netherlands','Spain','Sweden','Switzerland','United Kingdom'
    	)
    GROUP BY groupe_pays
    Sinon sans table de correspondance, et donc en absolument pas evolutif tu peux utiliser une sous requete.
    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
    SELECt Country_group, count(*)
    from
    (
    SELECT
    	case 
    		-- Renommage des pays ---
    		when country = 'France' then 'FR'
    		when country IN ('Austria','Germany','Switzerland') then 'DE'
    		when country IN ('Belgium','Denmark','Ireland','Sweden') then 'ROE'
    		when country = 'Italy' then 'IT'
    		when country = 'Netherlands' then 'NL'
    		when country = 'Spain' then 'ES'
    		when country = 'United Kingdom' then 'UK'
    		else 'N/A'
    	end AS Country_group
    FROM 	
    	ma_table
    WHERE 
    	country IN ( 
    	'Austria','Belgium','Denmark','France','Germany','Ireland','Italy','Netherlands','Spain','Sweden','Switzerland','United Kingdom'
    	)
    ) AS T
    GROUP BY Country_group
    Avec la première solution si tu souhaite rajouter la pologne qui se trouve dans le regroupement 'East Europe' tu n'as qu'a rajouter une ligne à ta table Greoupement_pays. Dans le deuxième cas, il faudra que tu modifies ta requête.

    Cordialement
    Soazig

Discussions similaires

  1. [Toutes versions] Groupe Options Case a cocher
    Par Aladin_23 dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/05/2011, 20h54
  2. Déchocher groupe de case à cocher
    Par JulienLon dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/04/2011, 14h53
  3. Cocher par défaut un groupe de case à cocher
    Par chacal1906 dans le forum Cognos
    Réponses: 3
    Dernier message: 30/09/2010, 10h19
  4. Listes déroulantes avec choix groupés de cases à cocher
    Par dav2k dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/07/2010, 23h54
  5. [REGLER] Formulaire avec groupe de case à cocher
    Par Mickael33 dans le forum Langage
    Réponses: 8
    Dernier message: 25/11/2009, 21h27

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