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

PL/SQL Oracle Discussion :

Identificateur non valide ORA-00904 [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirm�
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Ao�t 2019
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Clavardeur en tout genre

    Informations forums :
    Inscription : Ao�t 2019
    Messages : 64
    Par d�faut Identificateur non valide ORA-00904
    Bien le bonjour � tous,

    Je tente de faire la somme de deux requ�tes.

    Le but �tant de faire la somme des interventions en fonction de la date d'appel da_ap et celui qui les a cr�e wo_user_creator sur deux tables diff�rentes, En_cours et Archive, afin d'avoir le total des interventions cr��es par les deux techniciens en par rapport au num�ro de semaine.

    Je crois comprendre le message d'erreur, "Da_ ap" n'est pas retrouv� dans le SELECT permettant de faire la somme mais malgr� plusieurs tentatives et essais je ne vois pas comment r�soudre la probl�matique.
    Pourriez vous �clairer ma lanterne ?

    D'avance merci.

    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
    SELECT
       sum(inter) 
    FROM
       (
          SELECT
             TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW'),
             TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY'),
             COUNT(nu_int) AS inter 
          FROM
             en_cours 
          WHERE
             (
                wo_user_creator = 'TECH1' 
                OR wo_user_creator = 'TECH2'
             )
             AND TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') = '2023' 
          UNION ALL
          SELECT
             TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW'),
             TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY'),
             COUNT(nu_int) AS inter 
          FROM
             Archive 
          WHERE
             (
                wo_user_creator = 'TECH1' 
                OR wo_user_creator = 'TECH2'
             )
             AND TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') = '2023' 
       )
    GROUP BY
       TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW')

  2. #2
    Mod�rateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par d�faut
    la requ�te principale ne demande que la somme, ce faisant, le GROUP BY n'a rien � faire ici, ou alors il faut ajouter la colonne du GROUP BY dans le SELECT.

  3. #3
    Membre confirm�
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Ao�t 2019
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Clavardeur en tout genre

    Informations forums :
    Inscription : Ao�t 2019
    Messages : 64
    Par d�faut
    Merci pour ta r�ponse.

    Lorsque je rajoute la colonne duGROUP BY dans le SELECT j'ai le m�me message d'erreur.
    Lorsque je rajoute Da_ap dans le SELECT idem. J'avoue ne pas comprendre.

  4. #4
    Mod�rateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activit� : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par d�faut
    il faut donner un alias � la requ�te corr�l�e et aux colonnes restitu�es

    Exemple :

    Code SQL : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    with T1 (c1, c2) as
        (select 1, 'toto' from dual union all
         select 2, 'truc' from dual union all
         select 3, 'toto' from dual union all
         select 4, 'xxxx' from dual
        )
    select YY
         , sum(XX)
    from (select c2 as YY
               , c1 as XX
         from T1)  subq
    group by YY

    subq est l'alias de la table corell�e, XX et YY sont les alias des colonnes restitu�es

  5. #5
    Membre confirm�
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Ao�t 2019
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Clavardeur en tout genre

    Informations forums :
    Inscription : Ao�t 2019
    Messages : 64
    Par d�faut
    ok merci pour la piste de travail, il me reste qu' � appr�hender tout cela.

    Merci pour ton temps

  6. #6
    Membre confirm�
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Ao�t 2019
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Clavardeur en tout genre

    Informations forums :
    Inscription : Ao�t 2019
    Messages : 64
    Par d�faut
    Merci encore Escartefique j'ai essay� d'utiliser ta r�ponse mais je ne vois pas comment cela me d�passe visiblement.
    Ceci dit cela m' amen� � une autre approche qui est fonctionnelle, je suis pas loin de ton 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    WITH RequeteTotale AS (
        SELECT  
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW') AS Semaine,
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') AS annee,
            COUNT(nu_int) AS inter
        FROM en_cours 
        WHERE 
            (wo_user_creator ='tech1' OR wo_user_creator ='tech2')
            AND TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') = '2023'
        GROUP BY
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW'),
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY')
        UNION
        SELECT  
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW') AS Semaine,
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') AS annee,
            COUNT(nu_int) AS inter
        FROM archive
        WHERE 
            (wo_user_creator ='tech1' OR wo_user_creator ='tech2')
            AND TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY') = '2023'
        GROUP BY
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IW'),
            TO_CHAR(TO_DATE(da_ap, 'YYYY-MM-DD'), 'IYYY')
    )
    SELECT
        Semaine,
        annee,
        SUM(inter) AS TotalInter
    FROM RequeteTotale
    GROUP BY
        Semaine,
        annee
    ORDER BY
        Semaine DESC;

  7. #7
    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
    Ce que voulait dire escartefigue, c'est que le nom de colonne DA_AP est perdu dans votre premi�re sous-requ�te.
    De ce fait, group by ext�rieur vous renvoyait le message d'erreur.

    Avec votre nouvelle requ�te, c'est tr�s bien !

    Si je peux me permettre une �volution que vous n'avez pas demand�e, je proc�derais aux modifications suivantes :
    1. S�paration des donn�es de TECH1 & TECH2
    2. Mise en place d'une table calendrier
    3. Y rajouter cette colonne cal_annee_iso as (to_char(cal_jour, 'iyyy')) not null
    4. Jointure externe pour r�cup�rer les semaines sans intervention


    �a donnera une requ�te de ce genre :
    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
    with cte_encours_archive_dt as
    (
      select to_date(da_ap, 'yyyy-mm-dd')                        as da_ap_dt
           , count(case wo_user_creator when 'tech1' then 1 end) as inter_tech1
           , count(case wo_user_creator when 'tech2' then 1 end) as inter_tech2
        from en_cours
       where wo_user_creator in ('tech1', 'tech2')
         and to_char(to_date(da_ap, 'yyyy-mm-dd'), 'iyyy') = '2023'
    group by to_date(da_ap, 'yyyy-mm-dd')
       union all
      select to_date(da_ap, 'yyyy-mm-dd')
           , count(case wo_user_creator when 'tech1' then 1 end)
           , count(case wo_user_creator when 'tech2' then 1 end)
        from archive
       where wo_user_creator in ('tech1', 'tech2')
         and to_char(to_date(da_ap, 'yyyy-mm-dd'), 'iyyy') = '2023'
    group by to_date(da_ap, 'yyyy-mm-dd')
    )
        select cal.cal_semaine_iso
             , coalesce(sum(cea.inter_tech1), 0) as inter_tech1
             , coalesce(sum(cea.inter_tech2), 0) as inter_tech2
             , coalesce(sum(cea.inter_tech1), 0)
             + coalesce(sum(cea.inter_tech2), 0) as total_inter
          from v_calendrier           cal
     left join cte_encours_archive_dt cea on cea.da_ap_dt = cal.cal_jour
         where cal.cal_annee_iso = '2023'
      group by cal.cal_semaine_iso
      order by cal.cal_semaine_iso;

  8. #8
    Membre confirm�
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Ao�t 2019
    Messages
    64
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activit� : Clavardeur en tout genre

    Informations forums :
    Inscription : Ao�t 2019
    Messages : 64
    Par d�faut
    Excellent merci pour cette �volution, avec la reprise des �l�ments de ma requ�te c'est tr�s clair !Cela me donne des perspectives int�ressantes

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. erreur ora-00904 identificateur non valide
    Par zed80 dans le forum Oracle
    R�ponses: 2
    Dernier message: 05/01/2010, 13h23
  2. Ora-00904 Identificateur non valide ?
    Par DBA_OCP dans le forum Oracle
    R�ponses: 1
    Dernier message: 05/06/2009, 16h03
  3. ORA-00904 : identificateur non valide
    Par hotcold dans le forum SQL
    R�ponses: 10
    Dernier message: 01/03/2009, 19h20
  4. R�ponses: 2
    Dernier message: 26/02/2008, 09h16
  5. R�ponses: 5
    Dernier message: 13/08/2007, 13h02

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