2013-08-15 6 views
2

Я пытаюсь написать простой оператор IF/ELSE в Teradata. Насколько я понимаю, вы должны использовать CASE. Я хочу написать инструкцию, которая будет проверять, если столбец NOT NULL и что-то отображать. ELSE, если это NULL, отобразите что-нибудь еще.SQL case statement в Teradata

Каждый пример, который я нашел, просто заменяет одно значение строкой или строкой. Я ищу что-то более вдоль линий этого в которой используется ТОГДА заявление, чтобы сделать еще один SELECT:

SELECT CARS.VIN_NUM, CARS.DRIVER_NAMES 
    CASE 
     WHEN CARS.FUEL IS NOT NULL THEN SELECT CARS.DESTINATIONS 
     WHEN CARS.FUEL IS NULL THEN SELECT CARS.GAS_STATIONS 
    END 
    FROM AUTOMOBILES CARS 
    WHERE CARS.VIN_NUM IN 
    ('345353', 
    '354632', 
    '535231') 
    ORDER BY CARS.VIN_NUM 

Конечный результат должен быть таблица отображения VIN_NUM, DRIVER_NAMES, направления или GAS_STATIONS на основе CASE. Возможно ли что-то подобное или я ошибаюсь?

ответ

3

Если DESTINATIONS и GAS_STATIONS столбцы в таблице AUTOMOBILES (псевдонимами CARS), то следующий должен работать:

SELECT CARS.VIN_NUM, 
     CARS.DRIVER_NAMES, 
    CASE 
     WHEN CARS.FUEL IS NOT NULL THEN CARS.DESTINATIONS 
     ELSE CARS.GAS_STATIONS 
    END 
    FROM AUTOMOBILES CARS 
    WHERE CARS.VIN_NUM IN 
    ('345353', 
    '354632', 
    '535231') 
    ORDER BY CARS.VIN_NUM; 
+1

Что может быть еще более упрощен до: ДЕЛУ КОГДА CARS.FUEL НЕ NULL THEN CARS. НАЗНАЧЕНИЯ ELSE CARS.GAS_STATIONS END или COALESCE (CARS.GAS_STATIONS, CARS.DESTINATIONS) – dnoeth

+1

Спасибо! У меня также не было общего после первого оператора SELECT. – user1174834