I want to change the value on each column on a table. This is what I got:
CREATE VIEW old_employee AS
SELECT *
FROM dblink('dbname=mydb', 'select study, gloves, apron, vocation from personnel')
AS t1(study char(10), gloves integer, apron integer, vocation integer);
SELECT * FROM old_employee;
study | gloves | apron | vocation
------------+------------------+------------+
STUDY1 | 1 | 1 | 1 |
STUDY2 | 2 | 2 | 2 |
STUDY3 | 0 | 2 | 3 |
STUDY3 | 1 | 0 | 4 |
My desired output
study | gloves | apron | vocation
------------+------------------+------------+
1 | 51 | 54 | 35 |
2 | 53 | 56 | 37 |
3 | 52 | 56 | 43 |
4 | 51 | 55 | 45 |
My first thought is to use multiple CASE WHEN on an update. Something like:
UPDATE old_employee
SET study = (
SELECT studies.id
FROM studies
INNER JOIN old_employee
ON studies.name_string = old_employee.study
),
gloves = (
SELECT CASE
WHEN gloves = 0 THEN 52
WHEN gloves = 1 THEN 51
WHEN gloves = 2 THEN 53
END
FROM old_employee
),
apron = (
SELECT CASE
WHEN apron = 0 THEN 55
WHEN apron = 1 THEN 54
WHEN apron = 2 THEN 56
END
FROM old_employee
),
vocation = (
SELECT CASE
WHEN vocation = 1 THEN 35
WHEN vocation = 2 THEN 37
WHEN vocation = 3 THEN 43
WHEN vocation = 4 THEN 45
END
FROM old_employee
);
Obviously this is not working and I'm wondering if i'm approaching this problem correctly or missing something. I'm a programmer and new to SQL so im not quite used to the SQL-mindset.