Условные правила PLSQL

Требуются условные правила:

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,

Добро пожаловать в stackoverflow. Пожалуйста, найдите минутку, чтобы взять тур, особенно How to Как спросить. Решите, используете ли вы SQL Server или Oracle, поскольку это два разных продукта, использующих два разных диалекта sql, и редактировать ваш вопрос соответственно.

Zohar Peled 01.11.2018 15:34

Было бы полезно иметь немного больше контекста, особенно с точки зрения возврата всех

Andrew 01.11.2018 15:35

Не могли бы вы опубликовать то, что вы пробовали, чтобы мы не повторялись?

JonTout 01.11.2018 15:37

Извините, если NULL, то все данные из A B и C вернутся, но валюта будет ABC

mfgn 01.11.2018 15:39

@JonTout Обновлено

mfgn 01.11.2018 15:45

ваше требование все еще неясно в вашем заявлении case, вы сравниваете два строковых значения WHEN '& SITE' IS 'B'

Ajan Balakumaran 01.11.2018 15:47
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
6
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте функция декодирования для оператора if, только B и C производят другое значение, чем по умолчанию:

 decode(x, 'B', 'ABD', 'C', 'ABE','ABC')

@mfgn использовать его как есть после COJ.CURRENCY_CODE IS или COJ.CURRENCY_CODE =

user7294900 01.11.2018 15:53

Вам следует придерживаться выражения 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 лет.

Отлично работает, используя это сейчас. Большое спасибо

mfgn 02.11.2018 09:15

Другие вопросы по теме