Desea usar una CASE
expresión de algún tipo.
En SQL Server, el código se vería así:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M'
ELSE gender END
Editar: como se indica en los comentarios (y algunas de las otras respuestas), ELSE no es necesario si coloca una cláusula WHERE en la declaración.
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M' END
WHERE gender IN ('M','W')
Esto evita actualizaciones innecesarias. Lo importante en cualquier caso es recordar que hay otras opciones además de M & W (NULL, por ejemplo) y que no desea ingresar información errónea. Por ejemplo:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
ELSE 'M' END
Esto reemplazaría cualquier NULL (u otros géneros posibles) como 'M' que sería incorrecto.
Un par de otras opciones serían
/*Simple form of CASE rather than Searched form*/
UPDATE TableName
SET gender = CASE gender
WHEN 'M' THEN 'W'
WHEN 'W' THEN 'M'
END
WHERE gender IN ( 'M', 'W' );
Y un mas conciso
/*For SQL Server 2012+*/
UPDATE TableName
SET gender = IIF(gender = 'M', 'W', 'M')
WHERE gender IN ( 'M', 'W' );