Мне нужна помощь с оператором Oracle SQL. Мне нужно сравнить три столбца различными способами и вернуть один номер.Использование DECODE для сравнения нескольких столбцов и возврата одного значения
Пример: Колонка A представляет собой нулевой & Колонка B является Нуль затем вернуться Колонка C Колонка B является NULL & Колонка C равна нулю, то Return Колонка A Колонка A представляет собой нулевой & Колонка C является нулевым, тогда Возврат Колонка B Колонка A - < Столбец B, затем колонка A
и так далее и так далее.
Я пробовал CASE/КОГДА/ELSE и DECODE (Обрезку. МЕРЕ работает нормально, когда я сравнение 3 колонки, если они НЕ NULL или я получаю 0.
Я нашел COALESCE (Инструкция NULLIF, и это отлично работало, за исключением тех случаев, когда у меня есть несколько столбцов со значениями OVER 0, оно всегда возвращает первое значение. Могу ли я также добавить «наименьшую» функцию в (или в конце) функции NULLIF, чтобы она, если 2 из столбцов NOT NULL, то сравнивать эти 2 и дать мне наименьшее значение
Желательные Результаты:.
desc hrs cyc days interval hrs/cyc/days
============================================================
Task 1 72 0 0 72 hrs
Task 2 2400 1200 2190 2400 hrs
Task 3 600 0 180 600 hrs
Task 4 0 500 120 500 cyc
Task 5 0 0 30 30 day
Кодирование, чтобы получить вышеупомянутые результаты в Business Intelligence/Web Intelligence выглядит следующим образом:
= If ([Remain Hours]=0 And [Remain Cycles] = 0) Then [Schedule Days]
Else If ([Remain Cycles]=0 And [Remain Days]= 0) Then [Schedule Hours]
Else If ([Remain Hours] = 0 And [Remain Days] = 0) Then [Schedule Cycles]
Else If ([Remain Hours] = 0 And ([Remain Days] < [Remain Cycles]/6)) Then [Schedule Days]
Else If ([Remain Hours] = 0 And ([Remain Cycles]/6 < [Remain Days] )) Then [Schedule Cycles]
Else If ([Remain Hours] = 0 And ([Remain Cycles]/6 > [Remain Days] )) Then [Schedule Days]
Else If ([Remain Cycles] = 0 And ([Remain Hours]/13 < [Remain Days])) Then [Schedule Hours]
Else If ([Remain Cycles] = 0 And ([Remain Hours]/13 > [Remain Days])) Then [Schedule Days]
Else If ([Remain Days] = 0 And ([Remain Hours]/13 < [Remain Cycles]/6 )) Then [Schedule Hours]
Else If ([Remain Days] = 0 And ([Remain Hours]/13 > [Remain Cycles]/6 )) Then [Schedule Cycles]
Else If (([Remain Hours]/13) < ([Remain Cycles]/6) And ([Remain Hours]/13 < [Remain Days]) ) Then [Schedule Hours]
Else If (([Remain Cycles]/6 < [Remain Days]) And ([Remain Cycles]/6 < [Remain Hours]/13)) Then [Schedule Cycles]
Else If (([Remain Days] < [Remain Cycles]/6) And ([Remain Days] < [Remain Hours]/13)) Then [Schedule Days]
Пожалуйста, после некоторых образцов данных и желаемого результат – Aleksej
Можете ли вы описать большую проблему, которую вы пытаетесь решить? Я подозреваю, что это часть более крупного решения, где, если бы у нас была большая картина, мы могли бы предложить лучшее решение. –
Да, я это сделаю. В основном я работаю в авиакомпании и создаю отчеты об обслуживании. Каждая задача обслуживания должна выполняться либо часами, циклами и/или днями этой задачи, которые когда-либо на первом месте. Эти значения хранятся в трех разных полях. Таким образом, задача A имеет все 3 поля, которые отслеживаются. Я знаю, что я могу преобразовать ЧАСЫ И ЦИКЛЫ в ДНИ, но мне нужно, чтобы они сравнивали все 3 столбца, ЕСЛИ ЛЮБОЙ НЕ НУЛЛ, и дайте мне наименьшее значение. – EMassey