J'ai une requête qui renvoie la valeur du taux de change définie dans notre système. Toutes les commandes n’ayant pas un taux de change (currate.currentrate), elles renvoient donc des valeurs nulles.
Puis-je le faire renvoyer 1 au lieu de null?
Quelque chose comme une déclaration if peut-être:
if isnull(currate.currentrate) then 1 else currate.currentrate
Voici ma requête ci-dessous. J'apprécie grandement votre aide!
SELECT orderhed.ordernum, orderhed.orderdate, currrate.currencycode, currrate.currentrate
FROM orderhed LEFT OUTER JOIN
currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate
Vous pouvez utiliser une instruction CASE
.
SELECT
CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
Vous pouvez utiliser COALESCE
:
SELECT orderhed.ordernum,
orderhed.orderdate,
currrate.currencycode,
coalesce(currrate.currentrate, 1) as currentrate
FROM orderhed
LEFT OUTER JOIN currrate
ON orderhed.company = currrate.company
AND orderhed.orderdate = currrate.effectivedate
Ou même IsNull()
:
SELECT orderhed.ordernum,
orderhed.orderdate,
currrate.currencycode,
IsNull(currrate.currentrate, 1) as currentrate
FROM orderhed
LEFT OUTER JOIN currrate
ON orderhed.company = currrate.company
AND orderhed.orderdate = currrate.effectivedate
Voici un article pour vous aider à choisir entre COALESCE
et IsNull
:
http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/
SELECT
ISNULL(currate.currentrate, 1)
FROM ...
est moins verbeux que la réponse gagnante et fait la même chose
SELECT orderhed.ordernum, orderhed.orderdate, currrate.currencycode,
case(currrate.currentrate) when null then 1 else currrate.currentrate end
FROM orderhed LEFT OUTER JOIN currrate ON orderhed.company = currrate.company AND orderhed.orderdate = currrate.effectivedate
a) Si vous voulez 0 quand la valeur est nulle
SELECT isnull(PartNum,0) AS PartNumber, PartID
FROM Part
b) Si vous voulez 0 quand la valeur est nulle et sinon 1
SELECT
(CASE
WHEN PartNum IS NULL THEN 0
ELSE 1
END) AS PartNumber,
PartID
FROM Part
essayez comme ci-dessous ...
CASE
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate