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

Oracle Discussion :

1 seul select comprenant plusieurs count avec critères différent


Sujet :

Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Points : 71
    Points
    71
    Par défaut 1 seul select comprenant plusieurs count avec critères différent
    bonjour

    je voudrais pouvoir faire un seul select sur T1
    et obtenir les 3 count suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select count(F1)
    from t1
    where C1
    group by F2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(F1)
    from t1
    where C2
    group by F2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(F1)
    from t1
    where C3
    group by F2
    avec des jointures et en clonant 3 fois T1 les count sont faux.

    avec sous requetes je ne vois pas bien!

  2. #2
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    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
            A.Tot
            , B.Tot
            , C.Tot
    From    
              (
                select count(F1) Tot
                from t1
                where C1
                group by F2
              )     A
            , (
                select count(F1) Tot
                from t1
                where C2
                group by F2
              )     B
            , (
                select count(F1) Tot
                from t1
                where C3
                group by F2
              ) C

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    avec des fonctions analytiques ça doit se faire très facilement...

    Eventuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                SELECT SUM(DECODE(col,C1,1,0)), SUM(DECODE(col,C2,1,0)), SUM(DECODE(col,C2,1,0))
                FROM t1
                WHERE C1 OR C2 OR C3
                GROUP BY F2

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Points : 71
    Points
    71
    Par défaut suite
    ok

    mais comment synchroniser les 3 counts pour chaque occurence de F2 ?

    pour obtenir un tableau du type

    F2,A.tot,B.tot,C.tot

  5. #5
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Comme l'a suggéré Fred, regarde du côté des fonctions analytiques...

    sinon, tu aurais un petit Testcase à nous proposer ? on irais plus vite pour essayer de te dégager une solution...

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par gg2vig
    ok

    mais comment synchroniser les 3 counts pour chaque occurence de F2 ?

    pour obtenir un tableau du type

    F2,A.tot,B.tot,C.tot
    Rajoute F2 dans le select de la requête de Fred tout simplement...

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Points : 71
    Points
    71
    Par défaut exemple simplifié du besoin
    table plan :champs plan_code,plan_libellé

    table activité:champs act_code,act_plan,act_dateprev,act_datereal

    je veux lister tous les plan_code,plan_libellé de la table plan (group by plan_code,plan_libellé)

    et avec jointure act_plan = plan_code compter :
    1)le nombre d'act_code dont dateprev between :date_debut and :date_fin

    2) compter également dans le meme select le nombre 'act_code dont datereal between :date_debut and :date_fin

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT plan_code, plan_libelle,
    		SUM(DECODE(		SIGN(dateprev - :date_deb), -1, 0,
    					DECODE(SIGN(dateprev - :date_fin), 1, 0, NULL, 0, 1)))  AS nb_dateprev,
    		SUM(DECODE(		SIGN(datereal - :date_deb), -1, 0,
    					DECODE(SIGN(datereal - :date_fin), 1, 0, NULL, 0, 1)))  AS nb_dateprev
    FROM TPLAN p, ACTIVITE a
    WHERE a.act_plan = p.plan_code
    GROUP BY p.plan_code, p.plan_libelle
    EDIT : Rajout du NVL dans le cas de dates non renseignées.

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    En fait y'a plus simple avec le CASE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT plan_code, plan_libelle,
    		SUM(CASE WHEN dateprev BETWEEN :date_deb AND :date_fin THEN 1 ELSE 0 END)  AS nb_dateprev,
    		SUM(CASE WHEN datereal BETWEEN :date_deb AND :date_fin THEN 1 ELSE 0 END)  AS nb_datereal
    FROM TPLAN p, ACTIVITE a
    WHERE a.act_plan = p.plan_code
    GROUP BY p.plan_code, p.plan_libelle

Discussions similaires

  1. [XL-2010] Filtrer plusieurs colonnes avec critères différents
    Par amorello dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/05/2015, 14h38
  2. [2008R2] Probléme avec une Requête select plusieurs count avec le regroupement ?
    Par hamza_azerty dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/09/2014, 22h54
  3. [AC-2007] plusieurs counts avec critères sur plusieurs champs
    Par edogawa59 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 11/10/2010, 15h32
  4. selection de plusieurs dates avec un calandrier
    Par matdesign dans le forum Access
    Réponses: 5
    Dernier message: 01/10/2005, 08h21
  5. un seul SELECT sur plusieurs tables ?
    Par deloo dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/09/2005, 12h57

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