web-dev-qa-db-fra.com

Requête SQL, si la valeur est null, renvoyer 1

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
57
jenhil34

Vous pouvez utiliser une instruction CASE.

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
102
Justin Helgerson

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/

47
Taryn
SELECT 
    ISNULL(currate.currentrate, 1)  
FROM ...

est moins verbeux que la réponse gagnante et fait la même chose

https://msdn.Microsoft.com/en-us/library/ms184325.aspx

11
Barka
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  
2
ty733420

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
1
bhavi

essayez comme ci-dessous ...

CASE 
WHEN currate.currentrate is null THEN 1
ELSE currate.currentrate
END as currentrate
0
Pandian