Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2080 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] requtete pas facile

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] requtete pas facile

n°440119
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 12:46:57  profilanswer
 

J'utilise Oracle et des feuilles de style Xsl
je recupere mes valeurs par l'intermediaire d'un formulaire
je dois tester une valeur récupérée
cette valeur est comprise entre 1 et 5
entre 1 et 4 : je fais juste where mon_attribut=la_valeur_renvoyee_par_le_formulaire
 
si la valeur = 5 ca se complique
je dois faire le test avec la valeur 4 et faire un autre test supplémentaire :
where mon_attribut=4 and autre_condition
 
pour faire la 1ere condition j'utilise un replace mais pour la 2eme si j'inclus le test avec un OR quand la valeur = 5, la requete ne se termine jamais...
 
comment je pe faire cette condition?
aidez moi SVP

mood
Publicité
Posté le 26-06-2003 à 12:46:57  profilanswer
 

n°440285
MagicBuzz
Posté le 26-06-2003 à 14:24:37  profilanswer
 

Simple comme choux :D
 
where mon_attribut = decode(la_valeur_renvoyee_par_le_formulaire, 5, 4, la_valeur_renvoyee_par_le_formulaire ) and nouveau_champ = decode(la_valeur_renvoyee_par_le_formulaire, 5, nouvelle_condition, nouveau_champ)
 
[:powa]


Message édité par MagicBuzz le 26-06-2003 à 14:28:15
n°440343
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 14:53:54  profilanswer
 

MagicBuzz a écrit :

Simple comme choux :D
 
where mon_attribut = decode(la_valeur_renvoyee_par_le_formulaire, 5, 4, la_valeur_renvoyee_par_le_formulaire ) and nouveau_champ = decode(la_valeur_renvoyee_par_le_formulaire, 5, nouvelle_condition, nouveau_champ)
 
[:powa]


 
la premiere partie de cette solution correspond a mon REPLACE
la 2eme partie est un peu plus tordu mais je crois l'avoir compri
le pb c que je n'ai pas un =, j'ai un IN et donc j'ai un ensemble de valeur comme nouvelle condition et ca a pas l'air de plaire à Oracle...
...
AND mvt.cdpos_mvt = decode(: PFP, 5, 4, : PFP)
AND contrat.cd_smv in (decode(: PFP, 5, ('RESILIMP','RESILMED','RSLCNPT'), contrat.cd_smv))
 
comment faire?
(g mis un espace au milieu de : et PFP pour pas avoir :PFP


Message édité par hop le fou le 26-06-2003 à 14:58:00
n°440346
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 14:56:30  profilanswer
 

MagicBuzz a écrit :

Simple comme choux :D
 
where mon_attribut = decode(la_valeur_renvoyee_par_le_formulaire, 5, 4, la_valeur_renvoyee_par_le_formulaire ) and nouveau_champ = decode(la_valeur_renvoyee_par_le_formulaire, 5, nouvelle_condition, nouveau_champ)
 
[:powa]


 
et puis il y a un autre pb
étant donné qu on remplace la valeur 5 par la valeur 4, on ne la retrouvera jamais donc on ne fera jamais la condition
on peut passer la condition avant mais le probleme est le meme à moins d'utiliser une autre variable (que celle envoyée par le formulaire) non?

n°440376
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 15:11:22  profilanswer
 

hop le fou a écrit :


 
...
AND mvt.cdpos_mvt = decode(: PFP, 5, 4, : PFP)
AND contrat.cd_smv in (decode(: PFP, 5, ('RESILIMP','RESILMED','RSLCNPT'), contrat.cd_smv))
 


 
est ce que cette monstruosité est autorisée?
mvt.cdpos_mvt = decode(: PFP,5,4 AND contrat.cd_smv in ('RESILIMP','RESILMED','RSLCNPT'), : PFP)
parce que ca devrait marché...

n°440451
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 15:56:43  profilanswer
 

MagicBuzz a écrit :

Simple comme choux :D
[:powa]


 
non pas vraiment en fait...

n°440457
MagicBuzz
Posté le 26-06-2003 à 16:06:26  profilanswer
 

Pour le coup du IN, t'es malheureusement baisé.
J'ai à la limite un début de piste en tête, mais ça va prendre trop de temps à expliquer maintenant, relance-moi ce soir, et si j'ai pas oublié, je t'explique.
 
Sinon, pour le coup du 5 remplacé par 4, je vois pas où est le problème.
 
Pour info, un DECODE ça marche comme ça :
 
 
DECODE(A, B, C, D, E, F)
 
Revient à :
 
Switch (A)
{
   Case B:
      return C;
   Case D:
      return E;
   default:
      return F
}
 
PS: DECODE prends autant de paramètre que tu veux, le minimum étant 3.
 
Si le dernier paramètre est omis (nombre impair de paramètres passés) alors la valeur par défaut sera la valeur qui est en entrée (premier paramètre).
 
Donc ça ne fait pas un replace, y'a toute une interprétation conditionnelle derrière.


Message édité par MagicBuzz le 26-06-2003 à 16:06:52
n°440462
MagicBuzz
Posté le 26-06-2003 à 16:08:57  profilanswer
 

Bon, rapidement, pour le coup du IN, la solution à laquelle je pense (bidouille MagicBuzzienne powa [:powa])
 
where field = champ and (true = decode(la_valeur_renvoyee_par_le_formulaire, 5, true, false) AND toto in (la_liste))
 
T'ain ça se vois pas du tout que je passe mes journée à faire des requêtes à la con moi :D

n°440470
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 16:11:35  profilanswer
 

MagicBuzz a écrit :

Pour le coup du IN, t'es malheureusement baisé.
J'ai à la limite un début de piste en tête, mais ça va prendre trop de temps à expliquer maintenant, relance-moi ce soir, et si j'ai pas oublié, je t'explique.
 
Sinon, pour le coup du 5 remplacé par 4, je vois pas où est le problème.
 
Pour info, un DECODE ça marche comme ça :
 
 
DECODE(A, B, C, D, E, F)
 
Revient à :
 
Switch (A)
{
   Case B:
      return C;
   Case D:
      return E;
   default:
      return F
}
 
PS: DECODE prends autant de paramètre que tu veux, le minimum étant 3.
 
Si le dernier paramètre est omis (nombre impair de paramètres passés) alors la valeur par défaut sera la valeur qui est en entrée (premier paramètre).
 
Donc ça ne fait pas un replace, y'a toute une interprétation conditionnelle derrière.


 
ben c ma doc qui est pourrie alors c t indiqué que ca faisait un remplacement...  
http://www.laltruiste.com/document [...] haine.html bourde+2
OK pour le case je ferai un up plus tard

n°440480
MagicBuzz
Posté le 26-06-2003 à 16:19:46  profilanswer
 

Bah la doc est en effet pourrie.
 
Ca fait un replace conditionnel.
 
Par exemple :
 
select ltrim(decode(personne.titre, 'M', 'Monsieur ', 'Mme', 'Madame ', 'Mrg', 'Monseigneur ', 'Dr', 'Docteur ', 'P', 'Professeur ', ' ') || personne.nom) as Contact
from personne
 
=> Ca te "decode" l'abréviation de la civilité en la civilité entière.
 
Un autre exemple :
 
select entite.id, decode(entite.type, 'news', select news.titre where news.id = entite.id, 'article', select article.titre where article.id = entite.id, 'Non trouvé') from entite
 
=> Ca te retourne la liste de toutes les entités, avec leur titre retrouvé dans la table correspondant au type de l'entité. Pour les entité non trouvées, ça arriche un message d'erreur.
 
En somme, DECODE est assez complexe au permier abords, mais c'est MONSTRUEUSEMENT puissant quand tu sais t'en servir.
 
En gros : dès qu'une requête semble impossible, c'est qu'un petit decode de derrière les fagots sera nécessaire (en éxagérant un peu ;))


Message édité par MagicBuzz le 26-06-2003 à 16:21:04
mood
Publicité
Posté le 26-06-2003 à 16:19:46  profilanswer
 

n°440493
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 16:27:01  profilanswer
 

MagicBuzz a écrit :

Bah la doc est en effet pourrie.
 
Ca fait un replace conditionnel.
 
Par exemple :
 
select ltrim(decode(personne.titre, 'M', 'Monsieur ', 'Mme', 'Madame ', 'Mrg', 'Monseigneur ', 'Dr', 'Docteur ', 'P', 'Professeur ', ' ') || personne.nom) as Contact
from personne
 
=> Ca te "decode" l'abréviation de la civilité en la civilité entière.
 
Un autre exemple :
 
select entite.id, decode(entite.type, 'news', select news.titre where news.id = entite.id, 'article', select article.titre where article.id = entite.id, 'Non trouvé') from entite
 
=> Ca te retourne la liste de toutes les entités, avec leur titre retrouvé dans la table correspondant au type de l'entité. Pour les entité non trouvées, ça arriche un message d'erreur.
 
En somme, DECODE est assez complexe au permier abords, mais c'est MONSTRUEUSEMENT puissant quand tu sais t'en servir.
 
En gros : dès qu'une requête semble impossible, c'est qu'un petit decode de derrière les fagots sera nécessaire (en éxagérant un peu ;))


mais donc ca ne fera pas un replace au meme titre que REPLACE qui lui écrase la valeur de ma variable...
 g essayé le truc que tu ma dit (mais j y ai rien compris...) mais ca ne marche que si la valeur de ma variable = 4

n°440498
MagicBuzz
Posté le 26-06-2003 à 16:31:33  profilanswer
 

lequel ?
 
poste la requête qui merde, c'est plus facile quand on sait exactement de quoi on parle ;)

n°440506
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 16:36:16  profilanswer
 

MagicBuzz a écrit :

lequel ?
 
poste la requête qui merde, c'est plus facile quand on sait exactement de quoi on parle ;)


 
voila la requete entiere
 
select contrat.numcont_ct NUMCONT,
 produit.refer_pr REFPROD,
 tiers.desig1_ti||' '||tiers.desig2_ti ASSURE,
 contrat.prann_ct PRANN,
 contrat.cd_frc FRACT,
 contrat.cd_smv DERNMVT,
 to_char(contrat.dtef_ct,'DD/MM/YYYY') DATEPOS,
 to_char(contrat.dtech_ct,'MM') ECHCE,
 adrti.adr1_adt ADRESSE,
 adrti.cp_adt CP,
 adrti.ville_adt VILLE
FROM apport, ctint, entcontrat, contrat, tiersct, produit, ssmvt, mvt,adrti,tiers
WHERE entcontrat.id_ect = contrat.id_ect
 AND numavt_ct = (SELECT MAX (numavt_ct)
     FROM contrat
     WHERE id_ect = entcontrat.id_ect
      AND numali_ct = 0
      AND to_char(nvl(dtcrec_ct,dtmod_ct),'YYYYMMDD') <= :DS
      AND to_char(dtef_ct,'YYYYMMDD') <= :FI    
      AND to_char(dtef_ct,'YYYYMMDD') >= (select REPLACE(:DP,'','10000101')FROM DUAL)
     )
 AND nummvt_ct = (SELECT MAX (c.nummvt_ct)
     FROM contrat c
     WHERE c.id_ect = entcontrat.id_ect
      AND c.numali_ct = 0
      AND c.numavt_ct=contrat.numavt_ct
      AND to_char(nvl(c.dtcrec_ct,c.dtmod_ct),'YYYYMMDD') <= :DS
      AND to_char(c.dtef_ct,'YYYYMMDD') <= :FI
      AND to_char(dtef_ct,'YYYYMMDD') >= (select REPLACE(:DP,'','10000101')FROM DUAL)
     )
 AND contrat.cd_smv = ssmvt.cd_smv
 AND ssmvt.cd_mvt = mvt.cd_mvt
 
 
 
 
 AND mvt.cdpos_mvt = DECODE(:PFP,'5','4',:PFP)
 AND (true = decode(:PFP, 5, true, false) AND toto in ('RESILIMP','RESILMED','RSLCNPT'))
 
 
 
 
 AND contrat.cd_pr = produit.cd_pr
 AND entcontrat.id_ect = ctint.id_ect
 AND contrat.dtef_ct BETWEEN ctint.dtdeb_cin AND NVL (dtfin_cin, dtef_ct)
 AND ctint.adrenv_cin = 1
 AND contrat.numali_ct = 0
 AND contrat.cdtype_ct <> 'P'
 AND ctint.id_int = apport.id_int
 AND contrat.id_ct = tiersct.id_ct
 AND tiersct.cd_tt = 'AS'
 AND to_char(nvl(contrat.dtcrec_ct,contrat.dtmod_ct),'YYYYMMDD') <= :DS
 AND tiersct.id_ti = tiers.id_ti
 AND tiers.id_ti = adrti.id_ti
 AND adrti.princ_adt = 1
 AND apport.num_int = :NI
 AND contrat.cd_pr in (Select cd_pr  
       From produit  
       Where refer_pr = :PR OR :PR = 'ALL'
       )
 ORDER BY contrat.numcont_ct,
   produit.refer_pr,
   contrat.cd_smv
 
la partie qui déconne est celle ou il ya  de l'espace autour
il va surement yavoir des smiley au milieu a cause des parametres commencant par :
je ne comprend pas comment marche le decode en mettant false et true...

n°440510
MagicBuzz
Posté le 26-06-2003 à 16:42:37  profilanswer
 

Juste histoire de voir plus clair (aucune modif)
 
 

MagicBuzz a écrit :

lequel ?
 
poste la requête qui merde, c'est plus facile quand on sait exactement de quoi on parle ;)


 
voila la requete entiere
 
select contrat.numcont_ct NUMCONT,
 produit.refer_pr REFPROD,
 tiers.desig1_ti||' '||tiers.desig2_ti ASSURE,
 contrat.prann_ct PRANN,
 contrat.cd_frc FRACT,
 contrat.cd_smv DERNMVT,
 to_char(contrat.dtef_ct,'DD/MM/YYYY') DATEPOS,
 to_char(contrat.dtech_ct,'MM') ECHCE,
 adrti.adr1_adt ADRESSE,
 adrti.cp_adt CP,
 adrti.ville_adt VILLE
FROM apport, ctint, entcontrat, contrat, tiersct, produit, ssmvt, mvt,adrti,tiers
WHERE entcontrat.id_ect = contrat.id_ect
 AND numavt_ct = (SELECT MAX (numavt_ct)
     FROM contrat
     WHERE id_ect = entcontrat.id_ect
      AND numali_ct = 0
      AND to_char(nvl(dtcrec_ct,dtmod_ct),'YYYYMMDD') <= :DS
      AND to_char(dtef_ct,'YYYYMMDD') <= :FI    
      AND to_char(dtef_ct,'YYYYMMDD') >= (select REPLACE(:DP,'','10000101')FROM DUAL)
     )
 AND nummvt_ct = (SELECT MAX (c.nummvt_ct)
     FROM contrat c
     WHERE c.id_ect = entcontrat.id_ect
      AND c.numali_ct = 0
      AND c.numavt_ct=contrat.numavt_ct
      AND to_char(nvl(c.dtcrec_ct,c.dtmod_ct),'YYYYMMDD') <= :DS
      AND to_char(c.dtef_ct,'YYYYMMDD') <= :FI
      AND to_char(dtef_ct,'YYYYMMDD') >= (select REPLACE(:DP,'','10000101')FROM DUAL)
     )
 AND contrat.cd_smv = ssmvt.cd_smv
 AND ssmvt.cd_mvt = mvt.cd_mvt
 
 
 
 
 AND mvt.cdpos_mvt = DECODE(:PFP,'5','4',:PFP)
 AND (true = decode(:PFP, 5, true, false) AND toto in ('RESILIMP','RESILMED','RSLCNPT'))
 
 
 
 
 AND contrat.cd_pr = produit.cd_pr
 AND entcontrat.id_ect = ctint.id_ect
 AND contrat.dtef_ct BETWEEN ctint.dtdeb_cin AND NVL (dtfin_cin, dtef_ct)
 AND ctint.adrenv_cin = 1
 AND contrat.numali_ct = 0
 AND contrat.cdtype_ct <> 'P'
 AND ctint.id_int = apport.id_int
 AND contrat.id_ct = tiersct.id_ct
 AND tiersct.cd_tt = 'AS'
 AND to_char(nvl(contrat.dtcrec_ct,contrat.dtmod_ct),'YYYYMMDD') <= :DS
 AND tiersct.id_ti = tiers.id_ti
 AND tiers.id_ti = adrti.id_ti
 AND adrti.princ_adt = 1
 AND apport.num_int = :NI
 AND contrat.cd_pr in (Select cd_pr  
       From produit  
       Where refer_pr = :PR OR :PR = 'ALL'
       )
 ORDER BY contrat.numcont_ct,
   produit.refer_pr,
   contrat.cd_smv
 
la partie qui déconne est celle ou il ya  de l'espace autour
il va surement yavoir des smiley au milieu a cause des parametres commencant par :
je ne comprend pas comment marche le decode en mettant false et true...

n°440514
MagicBuzz
Posté le 26-06-2003 à 16:44:06  profilanswer
 

Argh !
 
Oui, je me suis planté :D
 
J'ai toujours été une bite en algèbre de bool, je fais pas assez attention :D
 
 

AND mvt.cdpos_mvt = DECODE(:pFP,'5','4',:pFP)
 AND (true = decode(:pFP, 5, false, true) OR toto in ('RESILIMP','RESILMED','RSLCNPT'))

n°440516
MagicBuzz
Posté le 26-06-2003 à 16:44:47  profilanswer
 

PS: intervertis le true et false, et mis un OR à la place du AND dans la condition dans les parenthèses.
 
Now ça doit marcher ;)


Message édité par MagicBuzz le 26-06-2003 à 16:45:18
n°440523
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 16:51:48  profilanswer
 

MagicBuzz a écrit :

PS: intervertis le true et false, et mis un OR à la place du AND dans la condition dans les parenthèses.
 
Now ça doit marcher ;)


 
hélas non ca ne marche pas
meme pas avec 4
il n ya pas d erreur dans la requete mais en moins d'1 seconde elle se termine et ne renvoie rien
(alors qu il lui fo bien 4-5 secondes normalement)
 
en fait sans utiliser decode, j arrive a faire marcher 4 et 5 mais pas 123 (je cherche comme ca mais je trouve pas...)

n°440530
MagicBuzz
Posté le 26-06-2003 à 16:58:03  profilanswer
 

Euh...
 
Je viens de voir un truc :
 
1) Un coup c'est '4' et '5' et l'autre, c'est 5.
=> Armonise, c'est source de problèmes.
 
2) C'est quoi ce "toto" que tu as laissé ? :o Faut mettre le nom du champ devant contenir les données du IN :lol:

n°440535
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 17:02:04  profilanswer
 

MagicBuzz a écrit :

Euh...
 
Je viens de voir un truc :
 
1) Un coup c'est '4' et '5' et l'autre, c'est 5.
=> Armonise, c'est source de problèmes.
 
2) C'est quoi ce "toto" que tu as laissé ? :o Faut mettre le nom du champ devant contenir les données du IN :lol:


oui le toto je m en suis rendu compte
c paske je deviens fou  :pt1cable:  
j essaye de changer les ' depuis tout a l heure mais je sais pas si il fo en mettre ou non
dans le replace qui fonctionne, je les mis mais ca ne fonctionne pas avec ce decode...

n°440550
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 17:13:35  profilanswer
 

CA A MARCHEEEEEEEEEEEEEEEEEEEEEE
c magnifique
c bo
c merveilleux
 
il fallait des ' partout pour pas qu il prenne ca pour des noms de colonnes...
AND mvt.cdpos_mvt = DECODE(:pFP,'5','4',:pFP)
 AND ('true' = decode(:pFP,'5','false','true') OR contrat.cd_smv in ('RESILIMP','RESILMED','RSLCNPT'))
 
merci bcp de m'avoir aidé et d avoir été aussi patient
 :love:

n°440563
MagicBuzz
Posté le 26-06-2003 à 17:24:56  profilanswer
 

Bah j'ai rien à foutre là :D
 
Sinon, chuis assez patient, parceque j'aime bien me triturer la tête avec des requêtes d'autiste :)
 
Pour info, je passe mes journées à faire des requêtes de ce type :D
 


select
 gam.codref as GAM,
 pay.LIBGRP as ETB,
 fac.sigcli,
 cli.nomcli,
 cli.famcli,
 fac.sigrep,
 pro.codpro,
 pro.codblo,
 pro.nompro,
 pro.fampro,
 pro.sfapro,
 pro.ssfpro,
 fac.numeve,
 fac.typeve,
 fac.qtecde,
 round(((fac.prxvdu*fac.qtecde)/chg.pivchg),2) as CA,  
 round((decode(typeve,'FAC',((fac.prxvdu-(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg, 'PRX', (fac.prxvdu*fac.qtecde)/chg.pivchg, ((fac.prxvdu+(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg)),2) as MARGIN,
 round(((decode(typeve,'FAC',((fac.prxvdu-(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg, 'PRX',(fac.prxvdu*fac.qtecde)/chg.pivchg, ((fac.prxvdu+(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg))/((fac.prxvdu*fac.qtecde)/chg.pivchg)*100), 2) as PERC
from
 detchg chg,
 tblref per,
 detpro pro,
 bo_tmp_dash fac,
 detcli cli,
 BO_TMP_MKG_GEO geo,
 BO_TMP_PAY pay,
 tblref ref,
 tblref gam
where
 chg.devpiv = 'USD' and chg.datval = to_char(sysdate,'yyyy')||'0101' and chg.coddev = fac.coddev  
 and per.codtbl = 'PERIODE' and to_char(sysdate-1, 'yyyymmdd') between per.datdeb and per.datfin and substr(per.codref,1,1) = 'Q'
 and fac.datval between per.datdeb and to_char(SYSDATE-1, 'yyyymmdd') and fac.prxvdu <> 0 and fac.sigcli not in ('014135','018211','020979','020045','014140','017688','017875','500436','019590','019896','019897', '015371') and fac.sigrep not in ('ITG',' ','MHD','FIL','FILSP') and fac.etbcod <> 'GIE'
 and pro.codpro = fac.codpro
 and geo.SIGCLI = fac.sigcli
 and pay.grppay = geo.grppay
 and ref.codtbl='GIECHG' and ref.codref='FRT'
 and gam.codtbl = 'BT' and gam.libref = pro.gammkg
 and cli.sigcli = fac.sigcli


Message édité par MagicBuzz le 26-06-2003 à 17:29:16
n°440565
hop le fou
Tu m'en diras tant
Posté le 26-06-2003 à 17:27:41  profilanswer
 

MagicBuzz a écrit :

Bah j'ai rien à foutre là :D
 
Sinon, chuis assez patient, parceque j'aime bien me triturer la tête avec des requêtes d'autiste :)
 
Pour info, je passe mes journées à faire des requêtes de ce type :D
 

select gam.codref as GAM, pay.LIBGRP as ETB, fac.sigcli, cli.nomcli, cli.famcli, fac.sigrep, pro.codpro, pro.codblo, pro.nompro, pro.fampro, pro.sfapro, pro.ssfpro, fac.numeve, fac.typeve, fac.qtecde,
 round(((fac.prxvdu*fac.qtecde)/chg.pivchg),2) as CA,  
 round((decode(typeve,'FAC',((fac.prxvdu-(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg, 'PRX',(fac.prxvdu*fac.qtecde)/chg.pivchg, ((fac.prxvdu+(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg)),2) as MARGIN,  
 round(((decode(typeve,'FAC',((fac.prxvdu-(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg, 'PRX',(fac.prxvdu*fac.qtecde)/chg.pivchg, ((fac.prxvdu+(fac.prxrev*ref.numbe1))*fac.qtecde)/chg.pivchg))/((fac.prxvdu*fac.qtecde)/chg.pivchg)*100), 2) as PERC
from detchg chg, tblref per, detpro pro, bo_tmp_dash fac, detcli cli, BO_TMP_MKG_GEO geo, BO_TMP_PAY pay, tblref ref, tblref gam
where chg.devpiv = 'USD' and chg.datval = to_char(sysdate,'yyyy')||'0101'  
and chg.coddev = fac.coddev  
and per.codtbl = 'PERIODE' and to_char(sysdate-1, 'yyyymmdd') between per.datdeb and per.datfin
and fac.datval between per.datdeb and to_char(SYSDATE-1, 'yyyymmdd')  
and fac.prxvdu <> 0 and substr(per.codref,1,1) = 'Q'
and fac.sigcli not in ('014135','018211','020979','020045','014140','017688','017875','500436','019590','019896','019897', '015371')
and fac.sigrep not in ('ITG',' ','MHD','FIL','FILSP')  
and fac.etbcod <> 'GIE'
and pro.codpro = fac.codpro
 and geo.SIGCLI = fac.sigcli
and pay.grppay = geo.grppay
and ref.codtbl='GIECHG' and ref.codref='FRT'
and gam.codtbl = 'BT' and gam.libref = pro.gammkg
and cli.sigcli = fac.sigcli




 
effectivement c joli
moi je crois que je vais en faire pas mal dans les tps a venir mais je commence juste c pour ca que g du mal
je connais pas trop mal sql mais tout ce qui est oracle m'est inconnu...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] requtete pas facile

 

Sujets relatifs
Pb dans menu déroulant avec SQL !!![SQL et C#] Récupération d'un numéro de session
[SQL et C#] Récupération d'un numéro de session[SQL et C#] Récupération d'un numéro de session
[SQL] Oracle, choisir plusieurs dates différentes[SQL] concatener les resultats
My SQL error[Acc97] Pb (pas facile!!) lors de l'exéc d'un MDE compilé...
[SQL] Query SoustractionRequete sous SQL SERVER avec Auto-Increment
Plus de sujets relatifs à : [SQL] requtete pas facile


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR