如何使用除特定值之外的多个值更新列

时间:2016-02-16 12:43:32

标签: sql sql-server-2008

tUser table is having values
UserID UserName Email isActive

---------------------------------------------

1 abc abc@gmail.com 1

2 abc abc@gmail.com 1

3 abc abc@gmail.com 1

4 abc abc@gmail.com 1

22 cd cd@gmail.com 1

23 cd cd@gmail.com 1

24 ef ef@gmail.com 1

25 ef ef@gmail.com 1

这些值与UserName abc重复。

我有一个查询来更新UserName'abc'的isActive列。

UPDATE dbo.tUser
SET isActive = 0
FROM Duplicates d,dbo.tUser
WHERE d.UserId =dbo.tUser.UserId
and d.RN>1

但它正在更新UserName'abc'的第一列。我需要将特定的userID'4'保持为1,将其他值保存为0.我该怎么做?

如果我需要包括4,23和25.我该怎么办? 我试过

;WITH Duplicates AS
(
    
        SELECT [UserId],[UserName],[Email],
 RN = ROW_NUMBER()OVER(PARTITION BY[UserName],[Email] ORDER BY [UserName],[Email])
 from dbo.tUser
   
)

UPDATE U
SET isActive = (case when U.UserId IN (4,23,25) THEN 1 ELSE 0 END)
FROM Duplicates d 
JOIN dbo.tUser U
ON d.UserId =U.UserId
and d.RN>1

但它不起作用

2 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,你可以使用CASE表达式:

UPDATE u
    SET isActive = (CASE WHEN u.UserId = 4 THEN 1 ELSE 0 END)
    FROM Duplicates d JOIN
         dbo.tUser u
         ON d.UserId = u.UserId
    WHERE d.RN > 1;

注意:学习使用正确的显式JOIN语法。简单的规则:从不FROM子句中使用逗号。

答案 1 :(得分:0)

首先是new Item(100007, 100012)是什么? d.RN表的结构是什么? Duplicates是否可能包含与Duplicates.UserId类似的ID但却引用完全不同的记录?

以下脚本对您有用(但是它没有经过全面测试,因为我没有IDE和SQLFiddler似乎失败了:

tUser.UserId