我正在尝试在SQL中运行以下case语句:
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的记录。对于NULL项,语句不返回THEN条件。
有什么建议吗?
答案 0 :(得分:1)
试试这个,让我们知道会发生什么。
'http://www.toolboxbarn.com/v/vspfiles/photos/'+
COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,
在这里使用coalesce比case语句更好。有些平台可以优化合并,它可以让您轻松制作默认值。
答案 1 :(得分:1)
@hogan的建议是一个很好的保存代码,但如果你没有引入他的新“默认”案例,它最终应该与你的case语句具有相同的结果。 ProductCode
很可能NULL
也是可能的吗?
为什么string + NULL = NULL
因为NULL在sql中是未知的,大多数数据库平台会在聚合或连接null时使整个值无效。
请考虑以下测试用例:
Id ProductCode Photos_Cloned_From
1 1 ClonedFrom
2 2 Null
3 NULL Null
你的案例表达和Hogan建议的结果将是:
1)ELSE'http://www.toolboxbarn.com/v/vspfiles/photos/ClonedFrom-2T.jpg'
2)当'http://www.toolboxbarn.com/v/vspfiles/photos/2-2T.jpg'
时3)WHEN NULL
答案 2 :(得分:0)
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,
答案 3 :(得分:0)
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