我正在尝试在sql中运行以下案例语句:
CASE
WHEN P.Photos_Cloned_From IS NULL
THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg'
ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg'
END AS image_link,
陈述有效,但仅适用于那些不是零的记录。对于null的项目,该语句不会返回当时的条件。
有什么建议?
尝试一下,让我们知道会发生什么。
'http://www.toolboxbarn.com/v/vspfiles/photos/'+
COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,
在这里使用Cocece比案例声明要好。有些平台可以优化凝聚力,它使您可以轻松地制作默认值。
@hogan的建议是保存代码的好建议,但是如果您不介绍他的新"默认"案例,则最终应该与您的案例语句相同。ProductCode
很可能也是NULL
是可能的吗?
为什么string + NULL = NULL
因为NULL是SQL中未知的,大多数DB平台将在汇总或串联时将整个值无效。
因此,请考虑以下测试用例:
Id ProductCode Photos_Cloned_From
1 1 ClonedFrom
2 2 Null
3 NULL Null
您的案例表达的结果和霍根的建议是:
1)其他'http://www.toolboxbarn.com/v/vspfiles/photos/photos/clonedfrom-2t.jpg'
2)当http://www.toolboxbarn.com/v/vspfiles/photos/2-2t.jpg'
3)null
CASE WHEN ISNULL(P.Photos_Cloned_From,'') = '' THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg'
ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg'
END AS image_link,
SELECT
F.Name
, F.Address
, F.InDate
, ( CASE WHEN (F.Date_Down IS NULL and F.Cod_Down = 0 )THEN 0 ELSE -1 END) as 'sn_Down'
FROM
Folders F