Заменить значения на разные значения - PullRequest
1 голос
/ 27 марта 2020

Пожалуйста, помогите мне. Мне нужно заменить значения code1, code2, code3 таблицы1 на описание таблицы 2.

Таблица 1

ID  CODE1   CODE2   CODE3                                   
--------------------------                  
222 4wta    5qer    2qrst                   
223 5qer    4rstu   4tws
224 4tws    2thua   1thur
225 4tws    5qer    3wrst

Таблица 2

code    description
-------------------
4wta    Good
5qer    medium
2qrst   Average
1thur   Mild
3wrst   Progress
2thua   Success
4rstu   Poor
4tws    Low

после замены

 ID CODE1   CODE2   CODE3  
-----------------------------
222 Good    medium  Average

1 Ответ

0 голосов
/ 27 марта 2020

Вы можете присоединить table2 к table1 для каждого столбца (для этого потребуется 3 объединения):

SELECT t1.id,
       t2a.description AS code1,
       t2b.description AS code2,
       t2c.description AS code3
FROM   table1 t1
       INNER JOIN table2 t2a ON t1.code1 = t2a.code
       INNER JOIN table2 t2b ON t1.code2 = t2b.code
       INNER JOIN table2 t2c ON t1.code3 = t2c.code

Или вы можете отключить table1 от столбцов к строкам, а затем выполнить одно соединение с table2 и затем переворачиваем таблицу из строк в столбцы:

WITH pivoted_values ( id, name, description ) AS (
  SELECT id,
         name,
         t2.description
  FROM   (
           SELECT *
           FROM   table1
           UNPIVOT ( code FOR name IN ( code1, code2, code3 ) )
         ) t1
         INNER JOIN table2 t2 ON t1.code = t2.code
)
SELECT id,
       code1,
       code2,
       code3
FROM   pivoted_values
PIVOT (
  MAX( description )
  FOR name IN (
    'CODE1' AS code1,
    'CODE2' AS code2,
    'CODE3' AS code3
  )
)

Оба они выводят:

 ID | CODE1  | CODE2   | CODE3   
--: | :----- | :------ | :-------
222 | Good   | medium  | Average 
223 | medium | Poor    | Low     
224 | Low    | Success | Mild    
225 | Low    | medium  | Progress

db <> fiddle здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...