case when + Selection d'une valeur

case when + Selection d'une valeur - SQL/NoSQL - Programmation

Marsh Posté le 03-11-2009 à 22:04:31    

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
 

Reply

Marsh Posté le 03-11-2009 à 22:04:31   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed