#sql #database
#sql #База данных
Вопрос:
Итак, допустим, у меня есть 2 таблицы:
Таблица данных:
CURRENCY COUNTRY VAT MODE
USD US FREEVAT AIR
EUR ESP FREEVAT SEA
GBP UK FREEVAT ROA
Поиск:
COLUMN_NAME INPUT_VALUE OUTPUT_VALUE
COUNTRY US United States
COUNTRY ESP Spain
COUNTRY UK United Kingdom
VAT FREEVAT 0
Есть ли способ объединить эти таблицы в операторе SELECT, чтобы заменить совпадения на column_name ?
Есть ли лучший структурный подход к этой проблеме?
Комментарии:
1. это очень плохой подход, и у вас должны быть отдельные столбцы или даже отдельные таблицы для хранения данных для разных объектов (например, в вашем примере country и vat)
2. @eshirvana Это вымышленный пример, то, что я пытаюсь достичь здесь, — это процесс в цепочке процессов внутри ELT, который исправит полученные данные
Ответ №1:
Вы можете использовать join
, но вам нужно четко указать имена столбцов:
select d.currency,
coalesce(lc.output_value, d.country) as country,
coalesce(lv.output_value, d.vat) as vat,
d.mode
from data d left join
lookup lc
on lc.input_value = d.country and
lc.column_name = 'COUNTRY' left join
lookup lv
on lv.input_value = d.vat and
lv.column_name = 'VAT'
Комментарии:
1. 2-го
coalesce
lv
не должно бытьlc
. В противном случае очень хороший ответ, как обычно.2. Спасибо за ответ, это отлично работает, но все может очень быстро стать уродливым, если количество столбцов в моих таблицах данных увеличится. Есть ли какая-либо альтернатива, в которой я могу избежать продолжения добавления объединений поверх объединений?
3. @rstici . , , я не могу придумать простого решения этой проблемы перекодирования, если вам нужно сделать это по нескольким несвязанным столбцам.