如你所知, COALESCE 返回第一个not- null 价值观。现在我要说的是,也不是- null 还是不- 0 . 我该怎么做?这是我的密码:
COALESCE
null
0
SELECT COALESCE(qa2.AcceptedAnswer, qa.AcceptedAnswer) AcceptedAnswer FROM qanda
t5zmwmid1#
一种方法使用 NULLIF() :
NULLIF()
SELECT COALESCE(NULLIF(qa2.AcceptedAnswer, 0), qa.AcceptedAnswer) as AcceptedAnswer FROM qanda;
就我个人而言,我更喜欢 CASE 因为我发现意图更明确:
CASE
select (case when qa2.AcceptedAnswer <> 0 then qa2.AcceptedAnswer else qa.AcceptedAnswer end) as AcceptedAnswer
请注意,显式 NULL 不需要比较;这个 <> 处理好了。
NULL
<>
juud5qan2#
你可以写一个 CASE WHEN 在 COALESCE 功能。
CASE WHEN
SELECT COALESCE(CASE WHEN qa2.AcceptedAnswer<> 0 THEN qa2.AcceptedAnswer END ,CASE WHEN qa.AcceptedAnswer <> 0 THEN qa.AcceptedAnswer END) FROM T
sqlfiddle公司
2条答案
按热度按时间t5zmwmid1#
一种方法使用
NULLIF()
:就我个人而言,我更喜欢
CASE
因为我发现意图更明确:请注意,显式
NULL
不需要比较;这个<>
处理好了。juud5qan2#
你可以写一个
CASE WHEN
在COALESCE
功能。sqlfiddle公司