Ошибка в предложении порядка разбиения при использовании нескольких операторов - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу использовать множественные операторы case в выражении order by clause в выражении partition by У меня много столбцов, поэтому я публикую только требуемый.

У меня есть таблица клиентов, у которой есть:

Select
   name,
   ROW_NUMBER() OVER(PARTITON BY lastname, rollno 
ORDER BY
   CASE
      WHEN
         NVL(gender, address) IS NULL 
      then
         a.effdate desc 
      else
         CASE
            WHEN
               NVL(a.postoffc, a.mon) <= file.effdate 
            then
               file.effdate 
            else
               a.postoffc 
         END
         desc, NVL(l4.covcode, a.pass) 
   end
)
rn 
from
   customers a;

Если я удалю эти операторы case, то мое объединение с другими таблицами и запрос работает нормально. Итак, нет проблем в операторе соединения или любом другом логе c. Проблема, которую я получаю, заключается в том, что я использовал несколько операторов case. Я думаю, что мой синтаксис ошибочный. Пожалуйста, скажите мне, как можно решить эту ошибку. Мне нужно, чтобы в этом случае заявление оператора logi c было обязательным.

1 Ответ

1 голос
/ 09 апреля 2020

Вам нужно закрыть второй CASE блок до того, как вы объявите другие критерии заказа. Кроме того, у вас есть нежелательное DESC в выражении, которое должно быть помещено после it.

ORDER BY
    CASE
        WHEN NVL(gender, address) IS NULL THEN a.effdate
        ELSE CASE
            WHEN NVL(a.postoffc, a.mon) <= file.effdate THEN file.effdate 
            ELSE a.postoffc 
        END
    END desc,  --> here
    NVL(l4.covcode, a.pass) 

Но в целом, я не думаю, что вам нужно вкладывать case выражений. Это должно работать одинаково хорошо, и легче следовать:

ORDER BY
    CASE
        WHEN NVL(gender, address) IS NULL THEN a.effdate
        WHEN NVL(a.postoffc, a.mon) <= file.effdate THEN file.effdate 
        ELSE a.postoffc 
    END desc, 
    NVL(l4.covcode, a.pass) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...