如果另一个为null,则SQL使用某个字段

时间:2014-10-30 19:16:00

标签: sql sql-server-2008

我有一个sql2008服务器,我需要计算折扣。

正在播放的字段为SuggestedRetailPriceBasePriceAdPrice

逻辑是这样的:

if AdPrice is null
   return baseprice/suggestedretailprice
else
   if AdEndDate < GETDATE() // Ad is still valid
       return adprice/SuggestedRetailPrice
   endif
endif

如果上述情况令人困惑,这就是我需要做的事情:

通过将AdEndDate与GETDATE()进行比较,确定是否使用AdPrice或BasePrice取决于广告是否已过期。然后使用该字段并除以SuggestedRetailPrice并与值进行比较。即(AdPrice/SuggestedRetailPrice) >= 0.6

甚至可以使用一个查询吗?我知道有案例陈述,但我不确定它们是否适用于这种情况。

2 个答案:

答案 0 :(得分:2)

您还可以在ISNULL()中嵌入CASE语句,以进一步简化它:

SELECT
    ISNULL
      (
        CASE 
            WHEN AdEndDate < GETDATE() 
            THEN AdPrice 
        END, 
        BasePrice
      ) / SuggestedRetailPrice

答案 1 :(得分:0)

确实如此 - CASE允许您投射派生值,即使通过多个分支或switch语句也是如此。一般格式如下:

SELECT ...
    CASE WHEN AdPrice is null THEN baseprice/suggestedretailprice
       WHEN AdEndDate < GETDATE() -- Ad is still valid
       THEN adprice/SuggestedRetailPrice
       ELSE 42 -- Project a value for the column if the other branches aren't matched
    END AS MyValue