Сопоставить значения в столбце со значениями в SQL - PullRequest
0 голосов
/ 03 января 2019

Я хочу заменить определенные значения соответствующими значениями в SQL.Я не могу создать таблицу перекрестных ссылок.Значения могут быть указаны в файле 'txt' или 'properties' в моем приложении

Я смотрел на оператор CASE, но у меня есть 200 замен, для которых CASE недостаточно

SELECT dummy FROM TestTable;

В моем ответе, если я получу LOT_NUMBER Я хочу заменить его на Lot Number или если я получу LOT_NUMBER_XREF Я хочу заменить его на Lot Number Cross-Reference

dummy
LOT_NUMBER
LOT_NUMBER_XREF

для заменыс

dummy
Lot Number
Lot Number Cross-Reference

Ответы [ 3 ]

0 голосов
/ 03 января 2019

Если вы не можете использовать таблицу перекрестных ссылок, используйте подзапрос (вы должны сгенерировать его в своем приложении) или cte!CTE:

with mapping as (
 select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
 union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
select 
 t.value,
 coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join mapping m on t.value = m.old_value

или подзапрос:

select 
 t.value,
 coalesce(m.new_value, 'none') as new_value
from tbl_your_table t
left join (
 select 'LOT_NUMBER' as old_value, 'Lot Number' as new_value
 union all select 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
) m on t.value = m.old_value
0 голосов
/ 03 января 2019

Если у вас есть что-то общее, например _ charecter, тогда вы можете использовать LIKE оператор и

             SELECT replace(dummy,'_',' ') from table where 
             dummy like '%_%'   -- check generic regex

, затем используйте CASE WHEN поверх этого с DUMMY IN(X,REF) Then REPLACE(DUMMY,'X',CROSS) Точно так же и для других это уменьшит количество случаев.

Все дело в том, чтобы просто проверить обобщенные термины, а их замены сохранить в этом предложении IN, предварительно отфильтровывая самые общие из них.Если число все еще велико, вам нужна временная таблица для справочной информации, например, массив в других языках программирования

0 голосов
/ 03 января 2019

Если у вас есть много разных значений для замены, вы должны создать таблицу для хранения сопоставления старых значений с новыми значениями.Затем вы можете присоединиться к этой таблице в вашем запросе.

Приведенный ниже SQL заменяет старое значение новым значением (или оставляет его как есть, если перевод не был определен):

SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value

Для ограниченного числа значений для перевода вы можете CASE,или, может быть, CTE с UNION:

WITH mapping_table AS (
    SELECT 'LOT_NUMBER' AS old_value, 'Lot Number' AS new_value
    SELECT 'LOT_NUMBER_XREF', 'Lot Number Cross-Reference'
)
SELECT 
    COALESCE(m.new_value, t.value)
FROM 
    table t
    LEFT JOIN mapping_table m 
        ON t.value = m.old_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...