Requete conditionnelle [Oracle] - SQL/NoSQL - Programmation
Marsh Posté le 30-06-2003 à 16:57:31
hop le fou a écrit : |
Il suffit de rajouter "and rownum < 2" dans ta sous-requete
Marsh Posté le 30-06-2003 à 17:05:53
tomlameche a écrit : |
Oracle ne connait pas rownum...
ca a surement un autre nom...
je vais chercher...
Marsh Posté le 30-06-2003 à 17:12:11
hop le fou a écrit : |
comment ça il ne connait pas rownum ????
Il t'as dit quoi oracle quand t'as essayé ? Quelle requete ?
Marsh Posté le 30-06-2003 à 17:19:41
tomlameche a écrit : |
il ma dit nom de colonne inconnu...
je reessaye g des pbs de test
voila la requete
select contrat.numcont_ct NUMCONT,
produit.refer_pr REFPROD,
contrat.prann_ct PRANN,
decode(mvt.cdpos_mvt,1,'En Cours',2,'Mis en Demeure',3,'Suspendu',4,'Résilié','Autre') POSITION
from entcontrat,contrat,tiersct,produit,ssmvt,mvt
where contrat.id_ct = tiersct.id_ct
and contrat.numali_ct = 0
and contrat.id_ect = entcontrat.id_ect
and contrat.cd_smv = ssmvt.cd_smv
and ssmvt.cd_mvt = mvt.cd_mvt
and contrat.cd_pr = produit.cd_pr
and tiersct.cd_tt = 'SO'
and numavt_ct = (select max(numavt_ct)
from contrat
where id_ect = entcontrat.id_ect
and dtef_ct <= to_date(:DS,'DDMMYYYY')
and dtcrec_ct <= to_date(:DS,'DDMMYYYY')
)
and nummvt_ct = (select max(c.nummvt_ct)
from contrat c
where c.id_ect = entcontrat.id_ect
and contrat.numavt_ct = c.numavt_ct
and c.dtef_ct <= to_date(:DS,'DDMMYYYY')
and dtcrec_ct <= to_date(:DS,'DDMMYYYY')
)
and contrat.numcont_ct = NVL(:NC,contrat.numcont_ct)
and 'true' = decode(:NS,'NOT NULL','false','true')
OR tiersct.id_ti = (select id_ti
from tiers
where num_ti= :NS
and cd_tt = 'AS'
and rownum < "2"
)
Marsh Posté le 30-06-2003 à 17:23:32
Essai comme ça :
Citation : and ('true' = decode(:NS,'NOT NULL','false','true') |
Marsh Posté le 30-06-2003 à 17:28:13
tomlameche a écrit : Essai comme ça :
|
pb de serveur ici, pe pas tester dans l immediat...
mais je crois que c pour ca que ca marchait pas qd je testais le decode
c paske je ne mettais pas la parenthese sur la totalité du test
je pensais qu'elle servait à rien...
merci
Marsh Posté le 30-06-2003 à 16:49:06
encore un probleme de requete tordu avec des conditions
on recupere deux données d'un formulaire
il y en a une des deux qui est nulle
si la premiere est nulle on fait ceci :
and contrat.numcont_ct = NVL(:NC,contrat.numcont_ct)
ca ne pose pas de probleme
en revanche la deuxieme variable, si elle n'est pas nulle entraine la condition suivante :
tiersct.id_ti = (select id_ti
from tiers
where num_ti= :NS
and cd_tt = 'AS'
)
(c'est :NS qui peut etre a nul)
ca ne sert donc a rien d'utiliser NVL
g bien essayé d'utiliser decode :
and 'true' = decode(:NS,'NOT NULL','false','true') OR
tiersct.id_ti = (select id_ti
from tiers
where num_ti= :NS
and cd_tt = 'AS'
)
pour ne faire la condition que si c <> de null
(MagicBuzz ==> g pas du tout comprendre a cette technique)
on ne pe également pas utiliser le decode normalement en testant la valeur paske le test sur :NS se trouve dans une sous requete et si on adopte la meme solution que pour la premiere partie de la requete, on se retrouve avec + d'une colonne comme résultat ce qui ne plait pas du tout a Oracle évidemment...
alors keskil reste comme solution ?
a l'aide...