I have looked at similar questions previously but they seem to update a single column with multiple case conditions and the one answer I found for multiple columns seems a little long.
Let’s say I have a table like this:
| Column_1 | Column_2 | Column_3 | Column_4 | Column_5 |
|---|---|---|---|---|
| First | Value 1 | |||
| Second | Value 2 | |||
| …. | …. | |||
| Twelfth | Value 3 |
I want to use column_1 as a key and update column 3, column 4 and column 5 with known values.
My initial query guess was:
UPDATE table SET Column_3, Column_4, Column_5 CASE When Column_1 = 'First' Then 'first_col_3_val', 'first_col_4_val', 'first_col_5_val' When Column_1 = 'Second' Then 'second_col_3_val', 'second_col_4_val', 'second_col_5_val' ... When Column_1 = 'Tenth' Then 'tenth_col_3_val', 'tenth_col_4_val', 'tenth_col_5_val' END
The solution for a similar question was
UPDATE table SET Column_3 CASE When Column_1 = 'First' Then 'first_col_3_val' When Column_1 = 'Second' Then 'second_col_3_val' ... END SET Column_4 CASE When Column_1 = 'First' Then 'first_col_4_val' When Column_1 = 'Second' Then 'second_col_4_val' ... END SET Column_5 CASE When Column_1 = 'First' Then 'first_col_5_val' When Column_1 = 'Second' Then 'second_col_5_val' ... END
Would my initial query work? Or am I looking for a different SQL feature like Duplicate keys? I read up on a MySQL If() function but I’m working with Microsoft SQL. Thanks for the help!
Advertisement
Answer
may be you are looking for something like this:
update T
set T.column_3 = V.column_3
,T.column_4 = V.column_4
,T.column_5 = V.column_5
from table T
inner join
(
values
('first', 'first_3', 'first_4', 'first_5'),
('second', 'second_3', 'second_4', 'second_5')
...
) V (column_1, column_3, column_4, column_5)
on V.column_1 = T.column_1