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 :

SQL Comptage dégroupé


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut SQL Comptage dégroupé
    Bonjour,

    Je suis une bille en SQL, aussi je vous prie d'excuser ce topic qui n'a certainement que peu d'intérêt pour la majorité d'entre vous.
    J'ai écumé Google, sans trouver de résultat satisfaisant, reproductible ou tout simplement compréhensible.

    Mon problème :

    Dans une table FABRIQ, j'ai une ligne par Ordre de Fabrication (OF), sachant que plusieurs OF peuvent faire partie d'une même commande.
    J'ai besoin de lister chaque OF, la commande de laquelle il dépend, et le nombre d'OF faisant partie de cette commande.

    En dessin :
    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    OF      | CDE
    1000    | 237
    1001    | 237
    1002    | 237
    1003    | 238
    1004    | 238
    Je voudrais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    OF      | CDE | Nb
    1000    | 237 | 3
    1001    | 237 | 3
    1002    | 237 | 3
    1003    | 238 | 2
    1004    | 238 | 2
    J'ai commencé par l'erreur de débutant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OF, CDE,COUNT(*) FROM FABRIQ GROUP BY CDE
    Puis j'ai continué avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT OF,CDE,(SELECT COUNT(*) FROM FABRIQ GROUP BY CDE) FROM FABRIQ
    Sans autre résultat que des erreurs évidemment.

    Merci d'avance à qui pourra/voudra bien m'aider.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Apparemment dans les résultats voulus tu ne veux pas grouper par CDE, sinon tu ne pourrais afficher que CDE et le nombre de OF par CDE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     CDE | Nb
     237 | 3
     238 | 2
    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
        OF,
        CDE,
        (SELECT COUNT(*) FROM FABRIQ WHERE CDE = F.CDE)
    FROM
    FABRIQ F
    Il y a surement mieux ...

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Quel est le nombre d'OF par commande ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT CDE, COUNT(*) AS nbre_OF
    FROM FABRIQ
    GROUP BY CDE
    On fait une jointure de cette requête avec la table pour avoir le reste des infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT f.OF, f.CDE, tmp.nbre_OF
    FROM FABRIQ f
    INNER JOIN
    (
    	SELECT CDE, COUNT(*) AS nbre_OF
    	FROM FABRIQ
    	GROUP BY CDE
    ) tmp ON tmp.CDE = f.CDE
    ORDER BY f.OF
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 6
    Par défaut
    Mon SGBD est SQL SERVER 2008.

    Les solutions proposées par Bibeleuh et par CinePhil fonctionnent toutes les 2.

    Merci à vous !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Cette solution est bien meilleure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT OF, CDE, COUNT(*) OVER(PARTITION BY CDE) as nb
      FROM FABRIQ;

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

Discussions similaires

  1. [SQL] Comptage suivant valeur
    Par jeronimo83 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/07/2008, 14h44
  2. [SQL] Comptage d'enregistrements
    Par Noxstyle dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 26/02/2008, 23h56
  3. [SQL] Comptage des resultats retournés
    Par Luverger dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 24/08/2007, 16h09
  4. [SQL] Probleme de comptage distinct des lignes
    Par shagun dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 27/04/2007, 16h38
  5. Réponses: 3
    Dernier message: 21/01/2006, 13h01

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