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 fonction rank()


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    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
    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
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    La fonction analytique est: row_number()
    Cordialement,
    Franck.

  3. #3
    Futur Membre du Club
    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
    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
    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
    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 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    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 !

  6. #6
    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
    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.

  7. #7
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    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

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