SQL / Oracle SQL Code для поиска данных из других таблиц - PullRequest
0 голосов
/ 22 октября 2019

Как написать запрос для получения данных из другой таблицы для каждого столбца в существующей таблице.

Please find attached image for tables and sample data requirement.

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Вы можете left join три раза на system_code:

select
    d.id,
    s_cat.full_name cat_code_full_name,
    s_group.full_name group_code_full_name,
    s_other.full_name other_code_full_name
from data_table d 
left join system_code s_cat
    on s_cat.value = d.cat_code and s.code = 1
left join system_code s_group
    on s_group.value = d.group_code and s_group.code = 2
left join system_code s_other
    on s_other.value = d.other_code and s_other.code = 3

Чтобы избежать повторения объединений, альтернативным решением является условное агрегирование:

select
    d.id,
    max(case when s.value = d.cat_code   and s.code = 1 then s.full_name end) cat_code_full_name,
    max(case when s.value = d.group_code and s.code = 2 then s.full_name end) group_code_full_name,
    max(case when s.value = d.other_code and s.code = 3 then s.full_name end) other_code_full_name
from data_table d 
left join system_code s on s.value in (d.cat_code, d.group_code, d.other_code)
gtoup by d.id
0 голосов
/ 22 октября 2019

Я полагаю, что проблема, с которой вы здесь сталкиваетесь, заключается в том, как получить полное имя для всех 3 столбцов. 1 метод состоит в том, чтобы присоединиться к таблице SYSTEM_CODE трижды -

SELECT DT.ID
      ,SC1.FULL_NAME CAT_CODE_FULL_NAME
      ,SC2.FULL_NAME GROUP_CODE_FULL_NAME
      ,SC3.FULL_NAME OTHER_CODE_FULL_NAME
      ,DT.PRODUCT
FROM DATA_TABLE DT
JOIN SYSTEM_CODE SC1 ON SC1.VALUE = DT.CAT_CODE
JOIN SYSTEM_CODE SC2 ON SC2.VALUE = DT.CAT_CODE
JOIN SYSTEM_CODE SC3 ON SC3.VALUE = DT.CAT_CODE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...