Sql server SQL:如何进行条件更新
对不起,至少可以说这个标题不太好 在我的客户表中,我有4列电话号码:P1、P2、P3、P4。 我还有一个专栏,告诉我是否根本没有电话号码:值为1或0的NOPHONE(我知道这听起来很愚蠢,但说来话长,就是这样) 当我没有电话号码时,该值为1(它也有其原因) 现在,我要做的是,更新所有0的电话号码,并将值更改为NULL。。。除了那些NOPHONE=1(并且将有P1=P2=P3=P4=0)的记录之外,它们应该保持原样(即0) 如何在1 SQL语句中实现这一点Sql server SQL:如何进行条件更新,sql-server,sql-server-2008,Sql Server,Sql Server 2008,对不起,至少可以说这个标题不太好 在我的客户表中,我有4列电话号码:P1、P2、P3、P4。 我还有一个专栏,告诉我是否根本没有电话号码:值为1或0的NOPHONE(我知道这听起来很愚蠢,但说来话长,就是这样) 当我没有电话号码时,该值为1(它也有其原因) 现在,我要做的是,更新所有0的电话号码,并将值更改为NULL。。。除了那些NOPHONE=1(并且将有P1=P2=P3=P4=0)的记录之外,它们应该保持原样(即0) 如何在1 SQL语句中实现这一点 谢谢 使用CASE语句有条件地设置值。如
谢谢 使用
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
表示没有可用的电话号码,但您的问题的措辞正好相反。使用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)
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0
您的
NOPHONE
逻辑似乎有倒退。直观地说,我希望NOPHONE=1
表明没有可用的电话号码,但您的问题的措辞正好相反。我认为您需要将此条件添加为well和NOPHONE=1@Yuck-这是一个打字错误,下一个帕拉格拉夫记对了。不管怎样,我纠正了它。这意味着您的语句应该说NOPHONE=0,对吗?谢谢。我想你需要添加这个条件asw well和NOPHONE=1@Yuck-这是一个打字错误,下一个帕拉格拉夫记对了。不管怎样,我纠正了它。这意味着您的语句应该说NOPHONE=0,对吗?谢谢
UPDATE Customer
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0)
WHERE NOPHONE = 0