Требуются условные правила:
IF
A then currency = ABC
B then currency = ABD
C then currency = ABE
NULL = Returns data from A, B and C but it's currency is ABC
Пытаясь реализовать эту логику, я попытался использовать 3 отдельных оператора CASE, но это не сработало. Любая помощь приветствуется
Что у меня сейчас есть:
(Пробовал несколько вариантов)
CASE
WHEN '&SITE' IS 'A' THEN
COJ.CURRENCY_CODE IS 'ABC'
END A,
CASE
WHEN '&SITE' IS 'B' THEN
COJ.CURRENCY_CODE IS 'ABD'
END B,
CASE
WHEN '&SITE' IS NULL 'C' THEN
COJ.CURRENCY_CODE IS 'ABE'
END C,
Было бы полезно иметь немного больше контекста, особенно с точки зрения возврата всех
Не могли бы вы опубликовать то, что вы пробовали, чтобы мы не повторялись?
Извините, если NULL, то все данные из A B и C вернутся, но валюта будет ABC
@JonTout Обновлено
ваше требование все еще неясно в вашем заявлении case, вы сравниваете два строковых значения WHEN '& SITE' IS 'B'


Используйте функция декодирования для оператора if, только B и C производят другое значение, чем по умолчанию:
decode(x, 'B', 'ABD', 'C', 'ABE','ABC')
@mfgn использовать его как есть после COJ.CURRENCY_CODE IS или COJ.CURRENCY_CODE =
Вам следует придерживаться выражения case:
(CASE WHEN '&SITE' = 'A' THEN 'ABC'
WHEN '&SITE' = 'B' THEN 'ABD'
WHEN '&SITE' = 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
Или:
(CASE '&SITE' WHEN 'A' THEN 'ABC'
WHEN 'B' THEN 'ABD'
WHEN 'C' THEN 'ABE'
ELSE 'ABC'
END) as currency_code
CASE - это стандартный SQL, доступный во всех базах данных, и большинству людей он кажется более понятным. DECODE() - это специальный код Oracle, реализованный до того, как они стали использовать стандартные функции. CASE доступен в Oracle уже 20 лет.
Отлично работает, используя это сейчас. Большое спасибо
Добро пожаловать в stackoverflow. Пожалуйста, найдите минутку, чтобы взять тур, особенно How to Как спросить. Решите, используете ли вы SQL Server или Oracle, поскольку это два разных продукта, использующих два разных диалекта sql, и редактировать ваш вопрос соответственно.