Sélection d'une valeur bien définie SQL
imco20030
-
pebkac -
pebkac -
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,
<gras>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</gras>
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
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,
<gras>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</gras>
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
A voir également:
- Sélection d'une valeur bien définie SQL
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
- Je suis content que tu vas bien ou que tu ailles bien - Forum Réseaux sociaux
- Valeur ascii - Guide
- Vérifier que le serveur freebox est bien connecté à internet - Forum Freebox
1 réponse
salut,
au lieu d'incorporer des sous-reqûetes à d'autres sous-requêtes, ne serait il pas mieux d'amener ton demi joint comme une table participant au joint final genre :
parce que ta prose est vraiment pas facile à lire et encore moins à assimiler
au lieu d'incorporer des sous-reqûetes à d'autres sous-requêtes, ne serait il pas mieux d'amener ton demi joint comme une table participant au joint final genre :
select xxx, yyy, zzz, a, c from table1, ( select aaa a, bbb b, min(ccc) c from xxx left outer join www on x1 = w1 where w1=a1 group by aaa, bbb) table2 where ...
parce que ta prose est vraiment pas facile à lire et encore moins à assimiler