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 :

Comment compter seulement une valeur d'une colonne


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Comment compter seulement une valeur d'une colonne
    Bonjour,

    Je voudrais compter le nombre de fois qu'une ou plusieurs colonnes contiennent la valeur (O)ui. Voici la structure de la table :

    Champ1, Champ2, Champ3, Champ4
    Les champs Champ2, Champ3 contiennent les valeurs (O)ui ou (N)on
    Champs CHAR(1)
    Voici un Ex de ce que je voudrais avoir :

    Champ1 | Champ2 | Champ3 | Champ4
    Valeur1 | 5 | 2 | 3
    Valeur2 | 3 | 1 | 5

    Comment fait-on cela. J'utilise Interbase/Firebird

    Merci de votre assistance

    KolaC
    "Selon que notre idée est plus ou moins obscure
    L'expression la suit ou moins nette ou plus pure..."

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Tu peux donner un exemple plus précis des valeurs qu'il existe dans ta table et le résultat que tu voudrais que ta requête retourne ?
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    La table contient la liste des services rendus à des clients recus par des intervenants. Ex:

    Intervenant,Date,Renseignement,Orientation,Mediation,Depannage, Traduction
    Alain,10-06-2005,O,O,N,N,O
    Alain,10-06-2005,O,N,N,N,O
    Anne,11-06-2005,O,O,O,N,N
    Paula,12-06-2005,O,N,N,N,O
    Anne,14-06-2005,O,O,N,N,O
    .....
    Je voudrais que ma requete retourne

    Intervenant,Renseignement,Orientation,Mediation,Depannage, Traduction
    Alain, 2,1,0,0,2
    Anne,2,2,1,0,1
    Paula,1,0,0,0,1

    ce qui veut dire que Alain a traité 2 dossiers Renseignement, 1 Orientation, 0 Mediation, 0 Depannage, 1 Traduction

    Voila

    Merci de votre assistance
    "Selon que notre idée est plus ou moins obscure
    L'expression la suit ou moins nette ou plus pure..."

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    En une seule requête je ne vois pas, je ne dis pas que ça ne puisse pas se faire mais la dernière fois que j'ai cherché à effectuer un traitement similaire je n'ai pas réussi.

    Si vous voulez le faire en une seule requête je ne vous serai pas d'une aide précieuse sinon en plusieurs requêtes il doit suffir d'utiliser la clause GROUP BY.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Intervenant, 
           SUM (CASE WHEN Renseignement = 'O' THEN 1 ELSE 0 END) AS Renseignement,
           SUM (CASE WHEN Orientation   = 'O' THEN 1 ELSE 0 END) AS Orientation,
           SUM (CASE WHEN Mediation     = 'O' THEN 1 ELSE 0 END) AS Mediation,
           SUM (CASE WHEN Depannage     = 'O' THEN 1 ELSE 0 END) AS Depannage,
           SUM (CASE WHEN Traduction    = 'O' THEN 1 ELSE 0 END) AS Traduction 
    FROM laTable
    GROUP BY Intervenant
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Février 2004
    Messages : 27
    Points : 35
    Points
    35
    Par défaut
    Je ne suis pas familier avec interbase mais j'ai valider et la fonction "case" existe (vive ).

    Donc le sql ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT intervenant,
           SUM(CASE renseignement 
               WHEN 'O' THEN 1
               ELSE  0) AS renseignement,
           SUM(CASE orientation 
               WHEN 'O' THEN 1
               ELSE  0) AS orientation,
           ...
    FROM liste_service
    GROUP BY intervenant
    La syntaxe du case peut-être un peu différente. Le truc est de remplacer le 'O' par la valeur 1.

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne sais pas pour Interbase, mais les deux syntaxes (la première est plus générale) sont dans la norme (sauf qu'il faut un END dans les deux cas).
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2002
    Messages : 32
    Points : 23
    Points
    23
    Par défaut
    L'instruction SQL Case ne fonctionne que sur Interbase 7+ et ma version est 6.1 J'ai donc modifié la structure de ma table pour pouvoir remplacer les 'O' par 1 et faire des SUM avec des Group By

    Merci à vous tous pour vos propositions

    Kolac
    "Selon que notre idée est plus ou moins obscure
    L'expression la suit ou moins nette ou plus pure..."

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 2
    Dernier message: 18/11/2012, 11h25
  3. Réponses: 5
    Dernier message: 11/10/2010, 09h16
  4. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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