SQL:如何进行条件更新

时间:2012-08-01 13:23:52

标签: sql-server sql-server-2008

对不起,标题不是那么好,至少可以说。

在我的CUSTOMER表中,我有4列电话号码:P1,P2,P3,P4。 我还有一列告诉我,根本没有电话号码:NOPHONE的值为1或0(我知道这听起来很愚蠢,但这是一个很长的故事,所以就是这样。)

每当我没有电话号码时,该值为1(它也有其原因)。

现在,我要做的是更新所有具有0的电话号码,并将值更改为NULL ...除了那些NOPHONE = 1的记录(并且P1 = P2 = P3 = P4 = 0),它应保持原样(即0)。

如何在1个SQL语句中执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用CASE语句有条件地设置值。如果要保留当前值,只需将其设置为自身。 WHERE子句检查是否需要更改至少一列。

UPDATE CUSTOMER
SET
  P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END,
  P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END,
  P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END,
  P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END
WHERE NOPHONE = 0
  AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0)

你的NOPHONE逻辑似乎倒退了。直觉上我希望NOPHONE = 1表示没有可用的电话号码,但你的问题完全是另一种方式。

答案 1 :(得分:2)

UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0