SQL查询,如果value为null则返回1

jen*_*l34 57 t-sql null ssms

我有一个查询返回我们系统中设置的汇率值.并非每个订单都有汇率(currate.currentrate),因此它返回空值.

我可以让它返回1而不是null吗?

类似if语句的东西可能是:

 if isnull(currate.currentrate) then 1 else currate.currentrate 
Run Code Online (Sandbox Code Playgroud)

这是我在下面的查询.我非常感谢你的帮助!

 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
Run Code Online (Sandbox Code Playgroud)

Jus*_*son 107

您可以使用CASE声明.

SELECT 
    CASE WHEN currate.currentrate IS NULL THEN 1 ELSE currate.currentrate END
FROM ...
Run Code Online (Sandbox Code Playgroud)

  • `选择IsNull(currate.currentrate,1)`是一个更好的答案,就是这样. (8认同)
  • 读下去的下一个开发者会想到"为什么他们不只是使用`ISNULL`或`COALESCE`?".他们花费的每一秒都试图找出或解决为什么会成为第二次浪费. (4认同)
  • @pst*"我不买那个"*听起来并不像是在引出一个完整的答案.那是我的2美分. (4认同)
  • @pst也许你可以生成一个执行计划并告诉我们它是如何不同的,不是吗?但是,downvote确实不会被称为. (3认同)

Tar*_*ryn 47

你可以使用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
Run Code Online (Sandbox Code Playgroud)

甚至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
Run Code Online (Sandbox Code Playgroud)

这是一篇帮助决定COALESCE和之间的文章IsNull:

http://www.mssqltips.com/sqlservertip/2689/deciding-between-coalesce-and-isnull-in-sql-server/

  • @njk他们真的是...我是部分蓝精灵 (3认同)

Bar*_*rka 12

SELECT 
    ISNULL(currate.currentrate, 1)  
FROM ...
Run Code Online (Sandbox Code Playgroud)

比获胜的答案更简洁,并做同样的事情

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


小智 10

a) 如果你想要 0 当 value 为 null 时

SELECT isnull(PartNum,0) AS PartNumber, PartID
FROM Part
Run Code Online (Sandbox Code Playgroud)

b) 如果您希望当值为 null 时为 0,否则为 1

SELECT 
  (CASE
    WHEN PartNum IS NULL THEN 0
    ELSE 1
  END) AS PartNumber,
  PartID
FROM Part
Run Code Online (Sandbox Code Playgroud)