Присвойте значение Null столбцу в CTE

Я хочу присвоить NULL столбцу в зависимости от того, является ли другой столбец NULL. Оба этих столбца являются результатом предыдущего CTE, и, похоже, я не могу заставить его работать.

Вот мой код:

select 
    off_rent_start_date, 
    days_off_rent,
    case 
        when days_off_rent IS NULL
            then off_rent_start_date NULL
    end
from 
    FinalData

Необработанные данные выглядят так:

off_rent_start_date days_off_rent 2023-11-30 НУЛЕВОЙ

Ожидаемый результат должен выглядеть так:

off_rent_start_date days_off_rent НУЛЕВОЙ НУЛЕВОЙ

сообщение об ошибке «Неверный синтаксис рядом с ключевым словом NULL». должно быть понятно (воспроизведение ошибки см.: dbfiddle.uk/NVx1aPhB)

Luuk 03.08.2024 14:46

не указывайте две вещи после then и перед end.

Luuk 03.08.2024 14:46

@Луук, я все еще не понимаю

ATL-JP 03.08.2024 14:50

Ссылка: CASE THEN result_expression. За каждым then следует одно выражение. off_rent_start_date NULL — это не отдельное выражение, и неясно, что оно может означать.

HABO 03.08.2024 21:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Похоже, вам нужно что-то вроде этого:

Select 
  Case When days_off_rent IS NULL  -- this is condition that could be True or False
       Then NULL                   -- When True return NULL
  Else off_rent_start_date         -- Else (False) return value from column off_rent_start_date
  End as off_rent_start_date,      -- this is column alias (label) for the resultset
  days_off_rent
From FinalData

Выражение CASE работает последовательно сверху вниз. Первое условие WHEN, выполненное, возвращает значение THEN и выходит из CASE. Если ни один из них не удовлетворен, возвращает значение из ELSE, а если ELSE не определено (это необязательно), возвращает NULL.

Имея это в виду - тот же результат, который вы могли бы получить, используя обратную логику - когдаdays_off_rent НЕ NULL, выберите off_rent_start_date, в противном случае NULL.

Select 
  Case When days_off_rent IS NOT NULL 
       Then off_rent_start_date 
  End as off_rent_start_date,    -- there is no ELSE - so it results as NULL if WHEN condition is not satisfied
  days_off_rent
From FinalData

да, это кажется более правильным (я удалил свой ответ), см.: dbfiddle.uk/cvhnIKoo

Luuk 03.08.2024 14:56

@d r Спасибо, это работает

ATL-JP 03.08.2024 15:26

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