p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : février 2013
    Messages : 3
    Points : 0
    Points
    0

    Par défaut Problème avec fonction rank()

    Bonjour
    La requête suivante renvoie l'erreur
    "FROM keyword not found where expected"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select r.*, rownum() over(partition by r.gl_depot order by r.gl_depot) as rang 
    from (select gl_depot,gl_codearticle,sum(gl_qtefact) as Quantite
    from ligne 
    where gl_naturepieceg="FFO" and gl_typearticle="MAR" 
    and gl_datepiece>=now()-30 
    group by gl_depot,gl_codearticle 
    order by gl_depot,Quantite desc) r
    Si je retire la partie "over(partition by r.gl_depot order by r.gl_depot)", la requête fonctionne mais le n° de rang ne se réinitialise pas à chaque "gl_depot".

    Merci d'avance de votre réponse

  2. #2
    Modérateur
    Avatar de pachot
    Homme Profil pro
    Consultant DBA en Suisse (dbi services) ACE & OCM
    Inscrit en
    novembre 2007
    Messages
    1 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant DBA en Suisse (dbi services) ACE & OCM
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2007
    Messages : 1 417
    Points : 4 912
    Points
    4 912
    Billets dans le blog
    4

    Par défaut

    Bonjour,
    La fonction analytique est: row_number()
    Cordialement,
    Franck.
    Franck Pachot - Consultant en Suisse Romande (dbi services) - Oracle ACE - Oracle Certified Master (OCP 12c et OCM 11g) - twitter: @FranckPachot

    Je serais au Paris Oracle Meetup le 4 septembre pour vous montrer comment je lis un rapport AWR et parler de l'option In-Memory



  3. #3
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : février 2013
    Messages : 3
    Points : 0
    Points
    0

    Par défaut

    Merci pour cette réponse.
    J'ai corrigé et cela fonctionne ... Mais j'ai un nouveau problème :
    si je rajout à la fin "Where rang<=20", le requete me renvoie une erreur "rang identificateur non valide"
    Cordialement

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    6 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 6 086
    Points : 16 171
    Points
    16 171

    Par défaut

    Il faut utiliser la définition de l'expression "rang" dans la clause WHERE
    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.

  5. #5
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 054
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 054
    Points : 1 765
    Points
    1 765

    Par défaut

    Les conditions du SELECT ne connaissent pas les colonnes de sorties du SELECT.

    Il faut "rajouter un étage" à la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT *
      FROM 
    (
    SELECT r.*, rownum() over(partition BY r.gl_depot ORDER BY r.gl_depot) AS rang 
    FROM (SELECT gl_depot,gl_codearticle,sum(gl_qtefact) AS Quantite
    FROM ligne 
    WHERE gl_naturepieceg="FFO" AND gl_typearticle="MAR" 
    AND gl_datepiece>=now()-30 
    GROUP BY gl_depot,gl_codearticle 
    ORDER BY gl_depot,Quantite DESC) r
    ) t
    WHERE t.rang <= 20

  6. #6
    Membre Expert
    Inscrit en
    août 2009
    Messages
    1 054
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 054
    Points : 1 765
    Points
    1 765

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    Il faut utiliser la définition de l'expression "rang" dans la clause WHERE
    Les fonctions de fenêtrage ne sont pas autorisées dans la clause WHERE !

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    6 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 6 086
    Points : 16 171
    Points
    16 171

    Par défaut

    En effet ... J'avais confondu Oracle avec un autre SGBD plus évolué.
    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.

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    7 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 210
    Points : 15 121
    Points
    15 121

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    J'avais confondu Oracle avec un autre SGBD plus évolué.
    Pour ma culture personnelle je veux bien savoir quel SGBD accepte cette syntaxe.

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    6 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 6 086
    Points : 16 171
    Points
    16 171

    Par défaut

    Ce n'est pas dans la clause WHERE mais dans la clause QUALIFY, qui se place entre la clause HAVING et la clause ORDER BY, que Teradata autorise l'utilisation de fonctions analytiques de regroupement pour faire une restriction.
    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.

  10. #10
    Invité de passage
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : février 2013
    Messages : 3
    Points : 0
    Points
    0

    Par défaut

    Merci pour vos réponses. Je vais tester cela aujourd'hui.
    Cordialement
    Sébastien

  11. #11
    Membre chevronné
    Inscrit en
    février 2010
    Messages
    411
    Détails du profil
    Informations forums :
    Inscription : février 2010
    Messages : 411
    Points : 744
    Points
    744

    Par défaut

    Oubliez pas d'enlever un des deux FROM que vous avez à suivre.

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    7 210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 210
    Points : 15 121
    Points
    15 121

    Par défaut

    Citation Envoyé par al1_24 Voir le message
    mais dans la clause QUALIFY, qui se place entre la clause HAVING et la clause ORDER BY
    Merci, c'est intéressant !

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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