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 :

[Access] Pb Regroupement donnée personnalisé


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 109
    Points : 47
    Points
    47
    Par défaut [Access] Pb Regroupement donnée personnalisé
    Bonjour a tous, j’ai un petit souci avec une requête...
    Je vous explique mon problème. J’ai une requête « Fiche » qui récupère plusieurs données notamment la marque et l’année des equipement.

    J’ai donc fait un graphique sous VBA/SQL pour qui se modifie suivant le choix de l’utilisateur. (Ceci marche très bien)



    Mon souci est que j’aurais aimé faire des familles de marques ou d’années

    Exemple : pour les marques A, B , C = groupe A
    Pour les années 1981, 1982, 1983, 1984,1985 = 81-85



    Je sais qu’une simple requête pourrait permettre tout cela, mais j’ai beau chercher sur le net et sur sql.developpez.com, je ne trouve pas ce que je veux


    Si vous pourriez m’aiguiller sur une solution, je vous en remercie


    PS : je vous laisse le code de ma première requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT [Fiche].Marque,COUNT(*) AS NOMBRE
    FROM [Fiche] 
    WHERE [Fiche].Marque Is Not Null
    GROUP  BY [Fiche].Marque

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Je n'ai pas compris ...

    Si c'est juste du formattage de données, il vaut mieux éviter de faire faire le boulot par le moteur SQL et gérer ceci via ton programme : cf l'article Les erreurs les plus fréquentes en SQL
    et en particulier le paragraphe 9. Cosmétique...
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    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 803
    Points
    30 803
    Par défaut
    Il y a deux moyens de faire ce que tu veux :
    1. Des groupes écrits en dur dans ta requête
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      SELECT  CASE WHEN [Fiche].Marque IN ('Marque1', 'Marque2') 
                      THEN    'Groupe1'
                   WHEN [Fiche].Marque IN ('Marque3', 'Marque4') 
                      THEN    'Groupe2'
                  ELSE    'Autres'
              END     AS  Groupe
          ,   COUNT(*) AS nombre
      FROM    [Fiche] 
      WHERE   [Fiche].Marque IS NOT NULL
      GROUP BY    Groupe
      ;
    2. Une table Groupes(Groupe, Marque) qui définit les groupes
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      SELECT  COALESCE(Groupes.Groupe, 'Autres')  AS Groupe
          ,   COUNT(*) AS nombre
      FROM    [Fiche] 
          LEFT JOIN
              Groupes
              ON  Fiche.Marque    = Groupes.Marque
      WHERE   [Fiche].Marque IS NOT NULL
      GROUP BY    Groupe
      ;

    La seconde solution est à mon avis plus souple
    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.

  4. #4
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Je pense qu'il faut faire le groupage sur la valeur calculée ds le SELECT (CASE ...).
    Selon le moteur que tu utilises le nom defini par AS ... risque de ne pas être reconnu,
    ou, si tu groupes sur la valeur lue ds la table (marque) tu vas avoir des lignes dupliquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT 	CASE 	WHEN Marque = 'A' THEN 'A'
    		WHEN Marque = 'B' THEN 'A'
    		WHEN Marque = 'C' THEN 'A'
    		ELSE marque
    	END AS marque,
    	COUNT(*) AS nbre
    FROM 	Fiche 
    WHERE	Marque IS NOT NULL
    GROUP  BY CASE 	WHEN Marque = 'A' THEN 'A'
    		WHEN Marque = 'B' THEN 'A'
    		WHEN Marque = 'C' THEN 'A'
    		ELSE marque
    	END

  5. #5
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 109
    Points : 47
    Points
    47
    Par défaut
    Oh oui ca a l'air pas trop mal... j'ai essayé mais il me dit Operateur absent ...

    J'ai oublié de precisé ... je suis sous access

  6. #6
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Re,

    Citation Envoyé par le_sonic
    je suis sous access
    Qd on dit qu'il faut le préciser
    Essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT IIF( Marque IN ('A' , 'B', 'C'), 'A', marque) AS groupe,
    COUNT(*) AS nbre
    FROM 	Fiche 
    WHERE Marque IS NOT NULL
    GROUP  BY IIF( Marque IN ('A' , 'B', 'C'), 'A', marque)

Discussions similaires

  1. (Access) Type de données incompatible...
    Par kissmytoe dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/02/2006, 20h37
  2. Réponses: 4
    Dernier message: 12/02/2006, 17h55
  3. [Access] Enregistrer des données de type Texte RTF
    Par portu dans le forum Bases de données
    Réponses: 22
    Dernier message: 27/10/2005, 22h54
  4. [Access] Base de données corrompue
    Par portu dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/11/2004, 22h02

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