Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/02/2013, 16h36   #1
sebj62
Invité de passage
 
Homme Sébastien JOUANIQUE
Responsable de service informatique
Inscription : 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
Citation:
"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
sebj62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h01   #2
pachot
Expert Confirmé
 
Avatar de pachot
 
Homme Franck Pachot
Consultant DBA en Suisse (Trivadis SA)
Inscription : novembre 2007
Messages : 1 058
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 42
Localisation : Suisse

Informations professionnelles :
Activité : Consultant DBA en Suisse (Trivadis SA)
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 1 058
Points : 3 033
Points : 3 033
Bonjour,
La fonction analytique est: row_number()
Cordialement,
Franck.
__________________
Comment fournir un plan d'exécution avec les statistiques d'exécution: ici
pachot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2013, 17h18   #3
sebj62
Invité de passage
 
Homme Sébastien JOUANIQUE
Responsable de service informatique
Inscription : 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
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
sebj62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h27   #4
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 936
Points : 11 922
Points : 11 922
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h30   #5
Rei Ichido
Membre Expert
 
Inscription : août 2009
Messages : 1 013
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 1 013
Points : 1 533
Points : 1 533
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
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/02/2013, 17h32   #6
Rei Ichido
Membre Expert
 
Inscription : août 2009
Messages : 1 013
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 1 013
Points : 1 533
Points : 1 533
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 !
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h48   #7
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 936
Points : 11 922
Points : 11 922
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 19h00   #8
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Î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 278
Points : 13 460
Points : 13 460
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 21h49   #9
al1_24
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 936
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 52
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 : 4 936
Points : 11 922
Points : 11 922
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
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/02/2013, 08h30   #10
sebj62
Invité de passage
 
Homme Sébastien JOUANIQUE
Responsable de service informatique
Inscription : 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
Merci pour vos réponses. Je vais tester cela aujourd'hui.
Cordialement
Sébastien
sebj62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 12h25   #11
Rams7s
Membre chevronné
 
François
Inscription : février 2010
Messages : 395
Détails du profil
Informations personnelles :
Nom : François

Informations forums :
Inscription : février 2010
Messages : 395
Points : 720
Points : 720
Oubliez pas d'enlever un des deux FROM que vous avez à suivre.
Rams7s est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 16h29   #12
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Î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 278
Points : 13 460
Points : 13 460
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h31.


 
 
 
 
Partenaires

Hébergement Web