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
但它不起作用
答案 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