For the last few weeks, I have been doing Friday Puzzles and I am really loving it. Yesterday, I received a very interesting question by Navneet Chaurasia on Facebook Page. He was asked this question in one of the job interviews. Please read the original thread for a complete idea of the conversation. I am presenting the same question here.
Let us assume there is a single column in the table called
Gender. The challenge is to write a single update statement which will flip or swap the value in the column. For example, if the value in the
gender column is ‘
male’ swap it with ‘
female’ and if the value is ‘
female’ swap it with ‘
Here is the quick setup script for the puzzle.
CREATE TABLE SimpleTable (ID INT, Gender VARCHAR(10))
INSERT INTO SimpleTable (ID, Gender)
SELECT 1, 'female'
SELECT 2, 'male'
SELECT 3, 'male'
The above query will return the following result set:
The puzzle was to write a single
update column which will generate the following result set:
There are multiple answers to this simple puzzle. Let me show you three different ways. I am assuming that the column will have either value ‘
male’ or ‘
Method 1: Using CASE Statement
I believe this is going to be the most popular solution as we are all familiar with the
SET Gender = CASE Gender WHEN 'male' THEN 'female' ELSE 'male' END
Method 2: Using REPLACE Function
I totally understand it is not the cleanest solution, but it will for sure work in the given situation.
SET Gender = REPLACE(('fe'+Gender),'fefe','')
Method 3: Using IIF in SQL Server 2012
If you are using SQL Server 2012, you can use IIF and get the same effect as
SET Gender = IIF(Gender = 'male', 'female', 'male')
You can read my article series on various functions of SQL Server 2012 over here.
Let us clean up.
DROP TABLE SimpleTable
Question to You
I came up with three simple tricks where there is a single
UPDATE statement which swaps the values in the column. Do you know any other simple trick? If yes, please post here in the comments. I will pick two random winners from all the valid answers. Winners will get:
I will announce the winners on coming Monday.
Reference: Pinal Dave (http://blog.SQLAuthority.com)
Filed under: CodeProject, PostADay, SQL, SQL Authority, SQL Interview Questions and Answers, SQL Puzzle, SQL Query, SQL Server, SQL Tips and Tricks, SQLServer, T SQL, Technology