Chcesz użyć CASE
wyrażenia pewnego typu.
W SQL Server kod wygląda następująco:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M'
ELSE gender END
Edycja: Jak stwierdzono w komentarzach (i niektórych innych odpowiedziach), ELSE nie jest konieczne, jeśli umieścisz w instrukcji klauzulę WHERE.
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
WHEN gender = 'W' THEN 'M' END
WHERE gender IN ('M','W')
Pozwala to uniknąć niepotrzebnych aktualizacji. W obu przypadkach ważne jest, aby pamiętać, że istnieją opcje inne niż M & W (na przykład NULL) i nie chcesz wprowadzać błędnych informacji. Na przykład:
UPDATE TableName
SET gender = CASE WHEN gender = 'M' THEN 'W'
ELSE 'M' END
Zastąpiłoby to wszystkie wartości NULL (lub inne możliwe płcie) jako „M”, co byłoby niepoprawne.
Byłoby kilka innych opcji
/*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' );
I bardziej zwięzłe
/*For SQL Server 2012+*/
UPDATE TableName
SET gender = IIF(gender = 'M', 'W', 'M')
WHERE gender IN ( 'M', 'W' );