Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2012, 11h21   #1
Membre à l'essai
 
Inscription : novembre 2008
Messages : 57
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Calvados (Basse Normandie)

Informations forums :
Inscription : novembre 2008
Messages : 57
Points : 23
Points : 23
Par défaut Filtre glissant en SQL avec la fonction decode

Bonjour à tous,

je ne suis pas spécialiste du SQL mais dois néanmoins m'en servir dans le Designer de Business Objects.

J'essaie de programmer un filtre dynamique pour mes requêtes, qui doit répondre à la question : si le mois en cours est janvier, alors récupère les données de l'année précédente, sinon celles de l'année en cours.

je passe par la fonction decode mais doute de pouvoir l'utiliser à cette fin dans un filtre. J'ai comme erreur "ExceptionBD, ORA-00907 : missing right parenthisis State: N/A". Mais il me semble qu'il ne manque pas de parenthese fermante.

voici mon code. pourriez vous m'aider ? Merci.
Code :
1
2
3
4
5
6
7
 
 
SELECT UBK_LQUA_HISTO.LQUA_DATEJ
 
WHERE
 
decode(TO_NUMBER(To_CHAR(sysdate,'MM')),'01',(TO_NUMBER(To_CHAR(UBK_LQUA_HISTO.LQUA_DATEJ,'YYYY'))=TO_NUMBER(TO_CHAR(sysdate,'YYYY'))-1),(TO_NUMBER(To_CHAR(UBK_LQUA_HISTO.LQUA_DATEJ,'YYYY'))=TO_NUMBER(TO_CHAR(sysdate,'YYYY'))))
jeremy
jerem7w est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 11h37   #2
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Il n'y a pas de à spécifier "=" dans decode... la syntaxe est :
decode(valeur à tester, si valeur possible 1, alors valeur de retour 1, si valeur de possible 2, alors valeur de retour2, ..., valeur par défaut).

Donc dans ton where, il faut que tu testes l'année en fonction d'un decode ou un case qui ne traite que le SYSDATE.
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 11h37   #3
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
Vous pouvez faire plus simple en vous insprant de ceci
Code :
1
2
3
4
5
6
7
 
SELECT U.LQUA_DATEJ FROM UBK_LQUA_HISTO U
WHERE  -- si le mois en cours est janvier, alors récupère les données de l'année précédente
       (to_char(sysdate,'MM') = '01' AND to_char(U.LQUA_DATEJ,'YYYY') = to_char(sysdate-40,'YYYY')) 
OR
       -- sinon c'est l'annee en cours
       (to_char(sysdate,'MM') != '01' AND to_char(U.LQUA_DATEJ,'YYYY') = to_char(sysdate,'YYYY'))
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 11h54   #4
Membre à l'essai
 
Inscription : novembre 2008
Messages : 57
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Calvados (Basse Normandie)

Informations forums :
Inscription : novembre 2008
Messages : 57
Points : 23
Points : 23
Grand merci à tous les 2.

pacmann : pour l'explication sur les egalités dans le decode

argoet : ta solution fonctionne à merveille et me fait progresser énormément d'un seul coup.

a bientot.
__________________
Jérémy
jerem7w est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 12h06   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Essayez plutôt ceci :
Code :
UBK_LQUA_HISTO.LQUA_DATEJ >= case extract(month FROM sysdate) when 1 then add_months(trunc(sysdate, 'YYYY'), -12) else trunc(sysdate, 'YYYY') end
Il ne faut pas appliquer de fonction aux colonnes de vos tables quand on peut jouer sur les constantes, vous perdez du temps de calcul et l'utilisation des index et partitions s'ils existent.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web