Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12
  1. #1
    Invité de passage
    Homme Profil pro Sébastien JOUANIQUE
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien JOUANIQUE
    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 :
    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é Sénior
    Avatar de pachot
    Homme Profil pro Franck Pachot
    Consultant DBA en Suisse (dbi services) OCM 11g
    Inscrit en
    novembre 2007
    Messages
    1 352
    Détails du profil
    Informations personnelles :
    Nom : Homme Franck Pachot
    Âge : 43
    Localisation : Suisse

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

    Informations forums :
    Inscription : novembre 2007
    Messages : 1 352
    Points : 4 025
    Points
    4 025

    Par défaut

    Bonjour,
    La fonction analytique est: row_number()
    Cordialement,
    Franck.
    Consultant en Suisse Romande (dbi services) - Oracle Certified Master (OCP 12c et OCM 11g) - Suivez-moi sur twitter: @FranckPachot
    Comment poster/envoyer un plan d'exécution avec toutes les infos pertinentes:
    http://www.dbi-services.com/index.ph...execution-plan


  3. #3
    Invité de passage
    Homme Profil pro Sébastien JOUANIQUE
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien JOUANIQUE
    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 Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 608
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    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 : 5 608
    Points : 12 696
    Points
    12 696

    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 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 606
    Points
    1 606

    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 :
    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 046
    Détails du profil
    Informations forums :
    Inscription : août 2009
    Messages : 1 046
    Points : 1 606
    Points
    1 606

    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 Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 608
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    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 : 5 608
    Points : 12 696
    Points
    12 696

    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 Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 816
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    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 : 6 816
    Points : 13 485
    Points
    13 485

    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 Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 608
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    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 : 5 608
    Points : 12 696
    Points
    12 696

    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 Sébastien JOUANIQUE
    Responsable de service informatique
    Inscrit en
    février 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Nom : Homme Sébastien JOUANIQUE
    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é
    Profil pro François
    Inscrit en
    février 2010
    Messages
    411
    Détails du profil
    Informations personnelles :
    Nom : François

    Informations forums :
    Inscription : février 2010
    Messages : 411
    Points : 667
    Points
    667

    Par défaut

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

  12. #12
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 816
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    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 : 6 816
    Points : 13 485
    Points
    13 485

    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 !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •