1

抱歉,标题不是那么好,至少可以这么说。

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

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

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

如何在 1 个 SQL 语句中做到这一点?

谢谢!

4

2 回答 2

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表明没有可用的电话号码,但您的问题的措辞正好相反。

于 2012-08-01T13:25:32.673 回答
2
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0
于 2012-08-01T13:52:22.683 回答