Возвращает значение, если не найдено ни одной выбранной строки. Oracle - PullRequest
0 голосов
/ 04 июля 2018

Вот мой простой запрос. Если я сделаю запрос на запись, которая не существует, я ничего не получу.

SELECT
CASE WHEN table1.column1= @column1  THEN 'XX' 
ELSE 'YY' END from table1 where table1.column2=@column2

Возвращает не выбранные строки.

Я пытался ISNULL(). Но не исправлено

Мне нужно вернуть «ГГ»

Может кто-нибудь помочь .. !! Заранее спасибо !!

Ответы [ 4 ]

0 голосов
/ 04 июля 2018

Отправленный вами запрос имеет символ @, который не является символом замены по умолчанию для переменных в Oracle, как в SQL-Server, если вы не использовали что-то вроде

SET DEFINE @ и ставить кавычки при передаче строкового литерала. Не уверен, что вы используете его таким образом.

Я бы предложил вам использовать переменную связывания с префиксом двоеточия :

По вашему вопросу

Мне нужно вернуть 'YY'

для no rows selected, вы можете поместить свой блок case в агрегатную функцию, такую ​​как MAX, которая будет возвращать строку с null, а COALESCE может обработать нули, чтобы дать вам желаемое значение когда нет строк.

SELECT
 COALESCE(
    MAX(
        CASE
            WHEN t.column1 =:column1  THEN 'XX'
            ELSE 'YY'
        END
    ),'YY')
FROM
    table1 t
WHERE
    t.column2 =:column2;
0 голосов
/ 04 июля 2018

Попробуйте это

SELECT
CASE WHEN table1.column1= @column1  THEN 'XX' 
ELSE 'YY' END from table1 where case when table1.column2=@column2 then table1.column2 else @column2 end = @column2

Примечание: если в таблице 1 имеется более одной записи, этот запрос вернет YY для всех этих строк

0 голосов
/ 04 июля 2018

Сохраняя это простым и легким для вас. Сначала проверьте, доступны ли данные согласно вашему where условию. Если это так, выполните остальную часть запроса, если он не просто вернет YY

например:

   If exists(SELECT * from table1 where table1.column2=@column2)
    begin
        SELECT
        CASE WHEN table1.column1 = @column1  THEN 'XX' 
        ELSE 'YY' END AS [COLNAME]
        from table1 where table1.column2=@column2
    end
    else
    begin
       SELECT 'YY' as [COLNAME]
    End

чтобы узнать больше о EXISTS ключевом слове, нажмите здесь

0 голосов
/ 04 июля 2018
select
   case 
      when coalesce(table1.column1,'empty') = @column1
        then 'XX' 
      else 'YY' 
   end as SOMETHING
  from table1 
 where coalesce(table1.column2,'empty') = @column2

Coalesce используется, чтобы проверить, является ли значение нулевым, и если это так, оно изменяется на значение, назначенное непосредственно рядом с именем столбца. Если бы вы предоставили свои данные, я мог бы изменить запрос sql в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...