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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  case when + Selection d'une valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

case when + Selection d'une valeur

n°1937442
imco20030
Posté le 03-11-2009 à 22:04:31  profilanswer
 

Bonjour,  
 
Je suis en train de corriger un rapport existant et il y a une sélection que je voudrais changer.  
Ce rapport est assez complexe et pour avoir une vision plus claire de mon problème, j'ai juste sélectionné les champs importants.  
 
Voici la query simplifié:  
 
select  
sl.ship_id, o.ordnum, o.batch_nr,  
case when o.ordnum = (select min(o3.ordnum) from ord o3 left join shipment_line sl3 on (o3.ordnum = sl3.ordnum) where sl3.ship_id = sl.ship_id)  
then 'Calcul'  
else 'invalid' + (select min(o3.batch_nr) from ord o3 left join shipment_line sl3 on (o3.ordnum = sl3.ordnum) where sl3.ship_id = sl.ship_id) end Total price  
from ord o  
 
cette query me donne le résultat suivant:  
Ship ID order nr batch nr total price  
123456 0551111 911 100 EUR  
123456 0551112 902 Invalid 902  
123456 0551113 905 invalid 902  
 
Analyse du 'select case when':  
Lorsque ordnum = min(ordnum) pour les ordnum ayant le même ship_id, alors cela donne 'calcul'. Dans mon exemple, cela équivaut à 100 EUR.  
Sinon, cela sélectionne 'invalid' + la plus petite valeur de 'batch_nr' pour les ordnum ayant le même ship_id  
 
Mon souhait est de changer le 'else' afin de sélectionner le batch_nr pour lequel le calcul est présent (dans cet example: sélectionner le batch_nr pour lequel 100 EUR est calculé c.à.d 911).  
 
Le résultat souhaité serait celui-ci:  
 
Ship ID order nr batch nr(reffld_5) total price  
123456 0551111 911 100 EUR  
123456 0551112 902 invalid 911  
123456 0551113 905 invalid 911  
 
 
J’ai tenté de changer la query en appliquant la logique suivante mais cela me retourne aucune valeur :  
case when o.ordnum = (select min(o3.ordnum) from ord o3 left join shipment_line sl3 on (o3.ordnum = sl3.ordnum) where sl3.ship_id = sl.ship_id)  
then 'calcul'  
else 'invalid' + (select (o3.btach_nr) from ord o3 left join shipment_line sl3 on (o3.ordnum = sl3.ordnum) where sl3.ship_id = sl.ship_id and o.ordnum = (select min(o3.ordnum) from ord o3 where sl3.ship_id = sl.ship_id) )  
end  
 
Merci pour votre aide.  
 
imco20030
 

mood
Publicité
Posté le 03-11-2009 à 22:04:31  profilanswer
 


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

  case when + Selection d'une valeur

 

Sujets relatifs
Macro sélection d'une plage[PHP] Bonne pratique du métier : association clé / valeur
Prendre la valeur après un pingGerer un evenement suite à une selection dans un ComboBox
comment passer a next line when reader.readModifier la valeur d'une borne variable d'une boucle for...
formulaire/recherche de case vide/message[PHP, JavaScript] Copier la valeur d'un input
garder la valeur d'un champs VBS vers htmlgarder la valeur d'un champs VBS vers html
Plus de sujets relatifs à : case when + Selection d'une valeur


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