Запрос на получение значения ближайшего совпадения на основе других столбцов - PullRequest
1 голос
/ 28 марта 2019

На основании приведенной ниже таблицы 1 я пытаюсь написать запрос, который позволяет мне создать новую таблицу, заполнить пустой идентификатор компании ближайшим совпадением на основе города, страны и региона.

Таблица 1 - это примерная таблица, тогда как Таблица 2 - это ожидаемый результат.

Таблица 1

Cust | City | Country | Region | CompanyID
ABC  |   KL |      MY |   APAC | 123456
ABC  |   KL |      MY |   APAC | 
ABC  |   JB |      MY |   APAC | 
ABC  |   SY |      AU |   APAC | 778899
ABC  |   ME |      AU |   APAC | 
GHI  |   DB |      AE |   EMEA | 112233
GHI  |   AD |      AE |   EMEA |

Таблица 2

Cust | City | Country | Region | CompanyID
ABC  |   KL |      MY |   APAC | 123456
ABC  |   KL |      MY |   APAC | 123456
ABC  |   JB |      MY |   APAC | 123456
ABC  |   SY |      AU |   APAC | 778899
ABC  |   ME |      AU |   APAC | 778899
GHI  |   DB |      AE |   EMEA | 112233
GHI  |   AD |      AE |   EMEA | 112233

Чувствуется, что-то вроде VLOOKUP, но не знаю, с чего начать. Буду искренне признателен за любую помощь, пожалуйста.

Спасибо!

1 Ответ

0 голосов
/ 28 марта 2019

В subquery.or или используя with создать встроенные представления всех значений по умолчанию. Затем внешнее присоединение к этим значениям по умолчанию.

Сначала я создал таблицу с именем usr_test_table, которая содержит те же данные, что и упомянутые выше. И обратите внимание, что моя база данных является оракулом, так что не запутайтесь "от двойного". Это специальная таблица в Oracle с одной строкой в ​​одном столбце.

select t1.cust, t1.city, t1.country, t1.region,
       case 
           when t1.companyid is not null then t1.companyid
           else (
                   select max(companyid)
                   from usr_test_table t2
                   where t2.country = t1.country
               )
       end companyid
from usr_test_table t1

Это немного проще, чем предыдущий комментарий о внешнем соединении со встроенным представлением. Поскольку теперь базы данных допускают подзапрос в предложении select, такие ситуации проще обрабатывать таким образом.

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