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 :

Problème avec select as


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut Problème avec select as
    Bonjour,

    Voila j'ai un problème avec une requête sql sous oracle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select dt_deb_cons as "Date", sum (qte_prod) as "Quantité"
    from histo_event_tr,histo_tr
    where histo_event_tr.id_histo = histo_tr.id_histo
    and dt_deb_cons > to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')
    and (id_ress_histo='UPAV3_CU11_0'
    or id_ress_histo='UPAV3_CU12_0'
    or id_ress_histo='UPAV3_CU21_0'
    or id_ress_histo='UPAV3_CU22_0')
    group by dt_deb_cons;
    Alors cette requête fonctionne bien sur sql plus, mais quand je passe pas excel et les données externe (Microsoft Query), ma requete ne marche pas et me renvoit
    from keyword not found where expected
    Donc le problème vient de mon select as, j'ai essayé avec des doubles apostrophes, avec des simples et même sans mais ca ne passe pas.

    Je supose donc que la syntaxe select as est différente sur Oracle mais je ne trouve pas (j'ai aussi essayé de virer le AS par hasard mais non)

    Si quelqu'un peut m'aiguiller

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Le AS ne sert à rien, il suffit de créer une ligne avec le nom des colonnes dans excel est remplir les lignes suivantes avec le résultat. AS est typiquement Oracle me semble-t-il, pas étonnant qu'Excel n'en veuille pas.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non pas de problème lourd avec votre requête, essayez sans guillemets et sans caractère accentué. Le AS en alias de colonne est normatif et supporté depuis très longtemps, chez Microsoft aussi. Après au niveau de l'interface avec Excel, je ne sais pas comment ça se passe.


    Par contre on peut apporter des améliorations, principalement syntaxiques, à votre requête.

    Jointures normatives, c'est plus facile à relire surtout quand vous avez beaucoup de tables. Beaucoup plus puissant dans le cadre des jointures externes.

    Utilisez IN au lieu des OR. C'est strictement identique en terme de performance (Oracle va traduire un IN en succession de OR), mais c'est beaucoup plus lisible.

    Dès que vous avez plus d'une table, utilisez toujours des alias de table !
    Ça raccourci la requête, et ça améliore encore une fois la lisibilité.
    Là en relisant votre requête on ne sait pas de quelles tables proviennent quelles colonnes.

    Le filtre sur la date : vous convertissez la date en texte, concaténez une chaîne et retransformez le tout en date.
    Et au final, il suffit de tronquer la date du jour à minuit et d'ajouter les heures, c'est plus court et plus rapide !

    Avec les modifications, ça donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      SELECT hi.dt_deb_cons AS Date_deb, sum(he.qte_prod) AS Quantite
        FROM histo_event_tr he
             INNER JOIN histo_tr hi
               ON hi.id_histo = he.id_histo
       WHERE hi.dt_deb_cons > trunc(sysdate) + 5.5/24
         AND id_ress_histo IN ('UPAV3_CU11_0', 'UPAV3_CU12_0', 'UPAV3_CU21_0', 'UPAV3_CU22_0')
    GROUP BY hi.dt_deb_cons;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    AS est typiquement Oracle me semble-t-il, pas étonnant qu'Excel n'en veuille pas.
    bizarre car quand je modifie directement ma requete dans la macro, la commande as fonctionne bien mais que pour une table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT histo_tr.DT_DEB_CONS, Sum(histo_event_tr.QTE_PROD)as Quantite"
    Avec le AS sur mon sum ca passe bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT histo_tr.DT_DEB_CONS as Date, Sum(histo_event_tr.QTE_PROD)as Quantite"
    avec les deux AS ca ne passe pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT histo_tr.DT_DEB_CONS as Date, Sum(histo_event_tr.QTE_PROD)"
    avec le AS que sur la date ca ne passe pas

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Trouvé. Date est un mot réservé Oracle, vous n'avez pas le droit de l'utiliser comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select 'toto' as Date from dual;
    -- ORA-00923: Mot-clé FROM absent à l'emplacement prévu
     
    select 'toto' as "Date" from dual;
    Date
    ----
    toto

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2009
    Messages : 43
    Points : 29
    Points
    29
    Par défaut
    Arf c'était juste ca!

    Merci pour les nouvelles modif beaucoup plus courtes et lisibles!
    Et en plus ca fonctionne bien

    Merci beaucoup à vous deux

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

Discussions similaires

  1. [SQL] Problème avec SELECT COUNT(*)
    Par jpascal dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 12h37
  2. [MySQL] [BDD] Problème avec SELECT "dynamique"
    Par Vecine dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/03/2006, 11h11
  3. Problème avec select sous MYSQL
    Par Thomad dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/01/2006, 11h26
  4. problème avec select sur onchange
    Par Kerod dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/12/2005, 14h05
  5. Problème avec select top
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 10/12/2004, 14h55

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