我有一个sql2008服务器,我需要计算折扣。
正在播放的字段为SuggestedRetailPrice
,BasePrice
和AdPrice
逻辑是这样的:
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
甚至可以使用一个查询吗?我知道有案例陈述,但我不确定它们是否适用于这种情况。
答案 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