【发布时间】:2015-12-30 23:03:33
【问题描述】:
在我们的系统中,每个客户都有一个称呼 (0),有些客户还有另一个额外的称呼 (22)。我需要做的是让那些没有 22 的人默认为 0 。我正在尝试使用 case 语句来完成此操作:
select distinct a.customer_no,
case when b.sal_code = '22' then '22'
when b.sal_code <> '22' then '0'
else '0'
end as salutation_no
from t_customer a
join t_sal b
on a.customer_no = b.customer_no
where a.customer_no in (1734379, 120706)
但是,我没有为有 22 分的客户获得 22 分,而没有为那些没有获得 0 分的客户获得 0 分,而是为所有客户获得 0 分,同时为那些也有 22 分的客户获得额外的 22 分:
customer_no salutation_no
120706 0
120706 22
1734379 0
【问题讨论】:
-
我认为 T-SQL 的不等于运算符是 "!=" 参见 post
-
incorrect 在 TSQL 中很好,但你也可以使用 != (我更喜欢 )
-
DISTINCT不仅仅适用于一列,它适用于所有选定的列。如果有两个a值具有不同的b值,SELECT DISTINCT a, b给出两行。请参阅@Szymon 的解决方案,它应该适合您。