在SQL Server

时间:2016-03-28 18:21:42

标签: sql sql-server

我有一张桌子

EmpId   EmpName   ManagerId   Gender                  
1       Shahzad       2         M         
2       Santosh       1         F         
3       Sayanhi       2         M         

错误地' M'被分配给女性员工和' F'分配给男性员工。所以我需要编写一个查询来进行修正。

我尝试了以下查询。

UPDATE Employee 
SET Gender='M' 
WHERE EmpId IN (SELECT EmpId FROM Employee WHERE Gender='F') 
  AND Gender='F'
WHERE EmpId IN (SELECT EmpId FROM Employee WHERE Gender='M')

但它没有用。

3 个答案:

答案 0 :(得分:9)

这是一个简单的解决方案,可以同时修复这两种情况:

UPDATE Employee
SET Gender = CASE Gender
  WHEN 'M' THEN 'F'
  WHEN 'F' THEN 'M'
END

答案 1 :(得分:2)

请改为尝试:

SELECT   empid, empname, CASE WHEN gender = 'M' THEN 'F' ELSE 'M' END AS Gender
INTO     #tmp
FROM     Employee

如果您对在那里看到的内容感到满意,那么:

UPDATE    Employee
SET       Employee.Gender = #tmp.Gender
FROM      Employee
INNER JOIN #tmp
ON        Employee.empid = #tmp.empid

答案 2 :(得分:1)

如果给出的是每个员工的性别都不正确,并且每个性别都已经是M或F,为什么不呢:

UPDATE Employee
   SET Gender=(CASE WHEN Gender='F' 
                    THEN 'M' 
                    ELSE 'F' END)