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

SQL Oracle Discussion :

Un select différent dans chaque colonne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 203
    Par défaut Un select différent dans chaque colonne
    Bonjour,

    Pour simplifier, j'ai une table partner ( code, status).
    Dans ma première colonne, j'aimerais avoir le nombre total de partner ayant comme status 'OK', et dans la 2ème colonne, le nombre total de partner ayant comme status 'No'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select count(p.status ='Ok'), count(p.status ='No')
    from partners p
    Je sais que ça c'est impossible, j'ai essayé aussi avec les sous requetes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select p1.ok,p2.n
    from
        (select count(*) as o
        from partners p
        where p.status='ok')p1,
        (select count(*)as n
        from partners p
        where p.status='no')p2
    Je ne vois pas comment je peux faire!!!
    merci beaucoup de votre aide
    claire

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    Essaie ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT COUNT (CASE
                     WHEN p.status = 'Ok'
                        THEN 1
                     END) CPT_OK, COUNT (CASE
                                  WHEN p.status = 'No'
                                     THEN 1
                               END)CPT_KO
      FROM partners p
    Demo
    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
    24
     
    SQL> WITH p AS
      2       (SELECT 1 code, 'Ok' status
      3          FROM DUAL
      4        UNION ALL
      5        SELECT 2 code, 'Ok' status
      6          FROM DUAL
      7        UNION ALL
      8        SELECT 3 code, 'No' status
      9          FROM DUAL)
     10  SELECT COUNT (CASE
     11                   WHEN p.status = 'Ok'
     12                      THEN 1
     13                END) cpt_ok, COUNT (CASE
     14                                       WHEN p.status = 'No'
     15                                          THEN 1
     16                                    END) cpt_ko
     17    FROM p;
     
        CPT_OK     CPT_KO
    ---------- ----------
             2          1
     
    SQL>

  3. #3
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    ou

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT SUM(OK_count) OK,
           SUM(NO_count) NO
    FROM
           (SELECT  DECODE(status,'OK',COUNT(*),0) OK_COUNT,
                    DECODE(status,'NO',COUNT(*),0) NO_COUNT
           FROM     partner
           GROUP BY status
           );

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Citation Envoyé par fatsora Voir le message
    ou

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT SUM(OK_count) OK,
           SUM(NO_count) NO
    FROM
           (SELECT  DECODE(status,'OK',COUNT(*),0) OK_COUNT,
                    DECODE(status,'NO',COUNT(*),0) NO_COUNT
           FROM     partner
           GROUP BY status
           );
    A mon avis tu n'as pas besoin de la sous-requête ni le groupe by

  5. #5
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    si

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select sum('OK') OK,sum('NO') NO
    from partner
    group by status
    /

    invalid number

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select sum(OK_count) OK,sum(NO_count) NO from (select decode(status,'OK',count(*),0) OK_COUNT,
     decode(status,'NO',count(*),0) NO_COUNT
    from partner
    )
    /

    renvoie not a single group function !!

    donc on a besoin sous requete et group by
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from partner;

    CODE,STATUS
    11111,OK,
    11112,OK,
    11113,OK,
    11113,NO,
    112,NO,
    113,NO,
    114,NO,
    115,NO,
    116,NO,
    11114,OK,
    11115,OK,
    11116,OK,
    11117,OK,
    11118,OK,
    11119,OK,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT SUM(OK_count) OK,
           SUM(NO_count) NO
    FROM
           (SELECT  DECODE(status,'OK',COUNT(*),0) OK_COUNT,
                    DECODE(status,'NO',COUNT(*),0) NO_COUNT
           FROM     partner
           GROUP BY status
           );

    OK,NO
    9,6,

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    SQL> set autotrace on exp
    SQL> WITH p AS
      2       (SELECT 1 code, 'Ok' status
      3          FROM DUAL
      4        UNION ALL
      5        SELECT 2 code, 'Ok' status
      6          FROM DUAL
      7        UNION ALL
      8        SELECT 3 code, 'No' status
      9          FROM DUAL)
     10  SELECT SUM(OK_count) OK,
     11         SUM(NO_count) NO
     12  FROM
     13         (SELECT  DECODE(STATUS,'Ok',COUNT(*),0) OK_COUNT,
     14                  DECODE(STATUS,'No',COUNT(*),0) NO_COUNT
     15         FROM     p
     16         GROUP BY STATUS
     17         );
     
            OK         NO
    ---------- ----------
             2          1
     
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=7 Card=1 Bytes=26)
       1    0   SORT (AGGREGATE)
       2    1     VIEW (Cost=7 Card=3 Bytes=78)
       3    2       HASH (GROUP BY) (Cost=7 Card=3 Bytes=12)
       4    3         VIEW (Cost=6 Card=3 Bytes=12)
       5    4           UNION-ALL
       6    5             FAST DUAL (Cost=2 Card=1)
       7    5             FAST DUAL (Cost=2 Card=1)
       8    5             FAST DUAL (Cost=2 Card=1)
     
     
     
    SQL> /* Formatted on 2008/12/03 11:02 (Formatter Plus v4.8.8) */
    SQL> WITH p AS
      2       (SELECT 1 code, 'Ok' status
      3          FROM DUAL
      4        UNION ALL
      5        SELECT 2 code, 'Ok' status
      6          FROM DUAL
      7        UNION ALL
      8        SELECT 3 code, 'No' status
      9          FROM DUAL)
     10  SELECT COUNT (CASE
     11                   WHEN p.status = 'Ok'
     12                      THEN 1
     13                END) cpt_ok, COUNT (CASE
     14                                       WHEN p.status = 'No'
     15                                          THEN 1
     16                                    END) cpt_ko
     17    FROM p;
     
        CPT_OK     CPT_KO
    ---------- ----------
             2          1
     
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=6 Card=1 Bytes=4)
       1    0   SORT (AGGREGATE)
       2    1     VIEW (Cost=6 Card=3 Bytes=12)
       3    2       UNION-ALL
       4    3         FAST DUAL (Cost=2 Card=1)
       5    3         FAST DUAL (Cost=2 Card=1)
       6    3         FAST DUAL (Cost=2 Card=1)
     
     
     
    SQL>

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

Discussions similaires

  1. [AC-2003] imputer des taux différents dans chaque colonne d'un même formulaire
    Par Ardiden31 dans le forum VBA Access
    Réponses: 16
    Dernier message: 16/04/2012, 14h28
  2. Réponses: 2
    Dernier message: 24/05/2011, 09h32
  3. Concatener données de tables différentes dans même colonne
    Par ARONE dans le forum Développement
    Réponses: 3
    Dernier message: 26/02/2009, 15h36
  4. objets différents dans une colonne de datagrid
    Par Pascale38 dans le forum Flex
    Réponses: 25
    Dernier message: 22/01/2009, 18h05
  5. Nombre de valeurs différentes dans une colonne
    Par KrusK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2005, 14h18

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