Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Условие выбора в SELECT  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
Доброго, допустим есть условие, от его зависит выбор нескольких параметров. Как сделать, что бы условие не нужно было дублировать для каждой колонки.

SELECT
 se.CLIENT_ID,

 CASE WHEN EMC.MSG_COUNT(LENGTH(sr.MSG),sr.EMSG_TYPE) <= EMC.MSG_COUNT(LENGTH(se.MSG),se.EMSG_TYPE)  THEN sr.MSG
 
ELSE se.MSG
 END AS SMS_TYPE
FROM EMSG_ENG se, EMSG_RUS sr 
WHERE se.CLIENT_ID = sr.CLIENT_ID
27 янв 17, 15:05    [20153691]     Ответить | Цитировать Сообщить модератору
 Re: Условие выбора в SELECT  [new]
AmKad
Member

Откуда:
Сообщений: 5222
PaxExterminatus
Как сделать, что бы условие не нужно было дублировать для каждой колонки.
Вынести его в inline-view.
27 янв 17, 15:11    [20153729]     Ответить | Цитировать Сообщить модератору
 Re: Условие выбора в SELECT  [new]
PaxExterminatus
Member

Откуда:
Сообщений: 15
AmKad,

не совсем понял как это поможет избавиться от нескольких case, если можно простенький примерчик

SELECT
 se.CLIENT_ID,

 CASE WHEN EMC.MSG_COUNT(LENGTH(sr.MSG),sr.EMSG_TYPE) <= EMC.MSG_COUNT(LENGTH(se.MSG),se.EMSG_TYPE)  THEN  sr.EMSG_TYPE
 ELSE se.EMSG_TYPE
 END AS EMSG_TYPE,  

 CASE WHEN EMC.MSG_COUNT(LENGTH(sr.MSG),sr.EMSG_TYPE) <= EMC.MSG_COUNT(LENGTH(se.MSG),se.EMSG_TYPE)  THEN sr.MSG
 ELSE se.MSG
END AS MSG

FROM EMSG_SMS_ENG se, EMSG_SMS_RUS sr --ИСПОЛЬЗОЫВАТЬ ФУНКЦИЮ ВЫБОРА
WHERE se.CLIENT_ID = sr.CLIENT_ID
27 янв 17, 16:19    [20154114]     Ответить | Цитировать Сообщить модератору
 Re: Условие выбора в SELECT  [new]
AmKad
Member

Откуда:
Сообщений: 5222
select 
case when dummy = 'X' and length(dummy) = 1 and upper(dummy) = dummy then 'Hello' end,
case when dummy = 'X' and length(dummy) = 1 and upper(dummy) = dummy then 'world' end 
from dual;

select 
case when pr = 1 then 'Hello' end,
case when pr = 1 then 'world' end
from
   (select 
    case when dummy = 'X' and length(dummy) = 1 and upper(dummy) = dummy then 1 else 0 end pr
    from dual
   );
27 янв 17, 16:27    [20154174]     Ответить | Цитировать Сообщить модератору
 Re: Условие выбора в SELECT  [new]
-2-
Member

Откуда:
Сообщений: 15330
PaxExterminatus,

напиши вместо джоина юнион и first/last.
27 янв 17, 16:28    [20154181]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить