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 :

ORA-00904 : identifiant invalide "Y"."DATE1"


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 199
    Par défaut ORA-00904 : identifiant invalide "Y"."DATE1"
    Bonjour,

    J'ai une requête qui ramène une erreur ORA-00904 : identifiant invalide "Y"."DATE1". Pourtant la sous-requête y contient bien le select de l'année :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y as (select trunc(date1, 'YYYY'), sum(cout_carburant) from mv_cout_carburant where vehicule = :P13_VEHICULE group by trunc(mv_cout_carburant.date1, 'YYYY')
    Voici la requête complète :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    with 
    r as (
    select trunc(t.date_travaux, 'yyyy') date_travaux, sum(t.montant_facture) montant_facture from mv_entretien t where vehicule=:P13_VEHICULE
    GROUP by trunc(t.date_travaux, 'yyyy'), t.vehicule), 
    y as (select trunc(date1, 'YYYY'), sum(cout_carburant) from mv_cout_carburant where vehicule = :P13_VEHICULE group by trunc(mv_cout_carburant.date1, 'YYYY'))
    select trunc(a.date1, 'YYYY') "Année", sum (a.kilometrage) "Kilométrage", sum ((r.montant_facture+y.cout_carburant)/a.kilometrage) "Prix de revient km" 
    from mv_cout_carburant a, r, y
    where  
    trunc(y.date1, 'yyyy') = trunc(a.date1, 'yyyy')
    and
    a.vehicule=:P13_VEHICULE
    group BY trunc (a.date1, 'YYYY')
    order by trunc(a.date1, 'yyyy');
    Bien cordialement,
    Christian

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Dans la déclaration de la table dérivée r, les expressions de la clause select ont bien un alias, pourquoi ne pas l'avoir fait pour y ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Il te manque des alias pour les expressions de colonnes dans le bloc "y". De plus, j'ai l'impression que ce bloc "y" est inutile. Tu prends les années disponibles dans la table mv_cout_carburant pour un véhicule, et tu fais une jointure entre ce bloc "y" et la même table sur le même véhicule et l'année. Forcément tu trouveras les mêmes années.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2016
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 199
    Par défaut
    Merci beaucoup ! du coup j'ai fait cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with s as (select trunc(date1, 'YYYY') as year1, sum(cout_carburant) as cout_carburant1, sum(kilometrage) as km from mv_cout_carburant where vehicule = :P13_VEHICULE group by trunc(date1, 'YYYY') order by 1),
    y as (select trunc(t.date_travaux, 'yyyy') as date_travaux, sum(nvl(t.montant_facture,0)) as montant_facture1 from mv_entretien t where vehicule=:P13_VEHICULE GROUP by trunc(t.date_travaux, 'yyyy'))
    select year1, cout_carburant1, km, cout_carburant1+nvl(montant_facture1,0) "carburant+factures", nvl(montant_facture1,0) "Factures", round ( (cout_carburant1+nvl(montant_facture1,0))/KM, 3) "PRK" from s, y
    where s.year1 = y.date_travaux (+)
    order by year1;

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2013, 17h07
  2. ORA-00904: "Nom_Colonne": invalid identifier
    Par robinson50 dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 07/08/2008, 16h34
  3. Erreur ORA-00904 : invalid identifier
    Par Sabact dans le forum SQL
    Réponses: 10
    Dernier message: 16/04/2008, 15h07
  4. ORA-00904: invalid identifier sur le last query
    Par decksroy dans le forum Forms
    Réponses: 4
    Dernier message: 24/01/2008, 12h03
  5. Réponses: 16
    Dernier message: 28/06/2007, 17h10

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