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 :

Grouper dans une vue


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 4
    Par défaut Grouper dans une vue
    Salut a tous,

    J'étudie actuellement le fonctionnement des vues et voici le point sur lequel
    je bloque: je dois créer une vue pour effectuer un comptage mais le problème est qu'il n'est pas possible d'utiliser des fonctions comme GROUP BY, DISTINCT et ROWNUM...

    Quelle serait donc le(s) alternative(s) pour y parvenir?

    Voici plus précisément mon cas détaillé:

    Travaille sur Oracle iSQL*Plus

    Ma table DDL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE jobs_agents
    (
    agent_id NUMBER(4),
    job_id NUMBER(4)
    );
    Puis quelques valeurs pour l'exemple:

    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
    INSERT INTO JOBS_AGENTS VALUES (1,6);
    INSERT INTO JOBS_AGENTS VALUES (1,13);
    INSERT INTO JOBS_AGENTS VALUES (1,17);
    INSERT INTO JOBS_AGENTS VALUES (2,3);
    INSERT INTO JOBS_AGENTS VALUES (2,8);
    INSERT INTO JOBS_AGENTS VALUES (2,9);
    INSERT INTO JOBS_AGENTS VALUES (2,14);
    INSERT INTO JOBS_AGENTS VALUES (3,15);
    INSERT INTO JOBS_AGENTS VALUES (3,16);
    INSERT INTO JOBS_AGENTS VALUES (3,22);
    INSERT INTO JOBS_AGENTS VALUES (3,24);
    INSERT INTO JOBS_AGENTS VALUES (4,1);
    INSERT INTO JOBS_AGENTS VALUES (4,2);
    INSERT INTO JOBS_AGENTS VALUES (5,7);
    INSERT INTO JOBS_AGENTS VALUES (5,10);
    INSERT INTO JOBS_AGENTS VALUES (6,23);
    INSERT INTO JOBS_AGENTS VALUES (7,11);
    INSERT INTO JOBS_AGENTS VALUES (7,17);
    INSERT INTO JOBS_AGENTS VALUES (8,25);
    INSERT INTO JOBS_AGENTS VALUES (9,4);
    INSERT INTO JOBS_AGENTS VALUES (9,5);
    INSERT INTO JOBS_AGENTS VALUES (10,12);
    INSERT INTO JOBS_AGENTS VALUES (11,19);
    INSERT INTO JOBS_AGENTS VALUES (11,20);
    INSERT INTO JOBS_AGENTS VALUES (11,21);
    INSERT INTO JOBS_AGENTS VALUES (11,26);

    Maintenant l'information DML que je dois isoler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT
    
    agent_id,
    COUNT(job_id)
    
    FROM
    
    jobs_agents
    
    GROUP BY
    agent_id
    
    ORDER BY
    agent_id;
    Evidement, lorsque je cré la vue, celle-ci échoue fatalement à cause de la fonction GROUP BY:

    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
    CREATE VIEW jobs_per_agent
    AS
    
    (
    SELECT
    agent_id,
    COUNT(job_id)
    
    FROM
    jobs_agents
    
    GROUP BY
    agent_id
    
    ORDER BY
    agent_id
    );

    Si quelqu'un a une solution, qu'il n'hésite pas!

    Merci pour vos réponses. a+

  2. #2
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    549
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 549
    Par défaut
    Merci d'indiquer la release d'oracle

    si tu es au moins en 9i
    les fonctions analytiques sont tes amis

    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
    SQL> CREATE VIEW jobs_per_agent
      2  AS ( SELECT DISTINCT(AGENT_ID) AS MyAgent,
      3  COUNT(JOB_ID) over(partition by AGENT_ID) AS MyCpt
      4  FROM JOBS_AGENTS);
     
    Vue créée.
     
    SQL> select * from jobs_per_agent;
     
       MYAGENT      MYCPT
    ---------- ----------
             1          3
             2          4
             3          4
             4          2
             5          2
             6          1
             7          2
             8          1
             9          2
            10          1
            11          4

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Par défaut
    Tiens, c'est la première fois que j'entend cela. Et tu as quoi comme message d'erreur ??? Alias le count et oublies pas l'espace dans l'order by

    Essayes ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE VIEW jobs_per_agent
    AS
    (
    SELECT
    agent_id,
    COUNT(job_id) count_job_id
    FROM
    jobs_agents
    GROUP BY
    agent_id
    ORDER BY agent_id
    );

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 4
    Par défaut
    J'utilise la version 10g mais je ne suis pas supposé me servir de la fonction analytique car je ne l'ai malheureusement pas abordé au cours de mon séminaire...

    Quand j'execute ton script Dagon74 j'ai toujours la même erreur, à savoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ORDER BY agent_id
    *
     
    ERREUR à la ligne 11 : 
    ORA-00907: parenthèse de droite absente
    ??? C'est étonnant qu'elle n'apparaisse pas chez toi?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ta syntaxe n'était pas correcte :
    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
    Connected to:
    Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
     
     
    13:34:40 PROMPT> CREATE VIEW jobs_per_agent
    13:34:52   2  AS SELECT
    13:34:52   3  agent_id,
    13:34:52   4  COUNT(job_id) COMPTE
    13:34:52   5  FROM jobs_agents
    13:34:52   6  GROUP BY
    13:34:52   7  agent_id
    13:34:52   8  ORDER BY
    13:34:52   9  agent_id ;
     
    View created.
     
     
    13:35:15 PROMPT> select * from jobs_per_agent ;
     
      AGENT_ID     COMPTE
    ---------- ----------
             1          3
             2          4
             3          4
             4          2
             5          2
             6          1
             7          2
             8          1
             9          2
            10          1
            11          4
     
    11 rows selected.
     
    13:35:28 PROMPT> exit

  6. #6
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Par défaut
    effectivement il faut 'aliaser' les colonnes calculées

    si on garde les parenthèses, il faut supprimer l'order by sinon sans ça passe, curieux. Les premières versions de Sql n'acceptaient pas l'order by dans les vues

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    En fait il faut que le order by soit en dehors des parenthèses :
    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
     
    SQL> CREATE OR REPLACE VIEW jobs_per_agent
    AS
    (
    SELECT
    agent_id,
    COUNT(job_id) count_job_id
    FROM
    jobs_agents
    GROUP BY
    agent_id
    )
    ORDER BY agent_id
    ;  2    3    4    5    6    7    8    9   10   11   12   13
     
    View created.
    Par contre ça sert à quoi de faire un ORDER BY dans une vue.
    En cas de jointure faudra bien retrié, ça fait donc double de boulot !

Discussions similaires

  1. [SQL Server 2000] ajouter une colonne identité dans une vue?
    Par CetTer dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/08/2005, 13h43
  2. Count dans une vue
    Par gldfdp dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 05h55
  3. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  4. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  5. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27

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