2016-02-16 4 views
1

Я пытаюсь создать представление в Postgresql, но когда я запускаю этот код появляется сообщение об ошибке:Postgresql Синтаксическая ошибка в или около «ТОГДА»

syntax error at or near " THEN "

CREATE OR REPLACE VIEW VW_MONITOR_DEVICE AS 
    SELECT 
     P.POSIZIONE_DEVICE_ID AS MONITOR_DEVICE_ID, 
     P.VALID AS VALID, 
     [...] 
     IF (VALID == FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID) AS DESCRIPTION, 
     [...] 
    FROM public.TA_POSIZIONI_DEVICE P 
    JOIN ... 

TA_POSIZIONI_DEVICE

  • ДЕЙСТВИТЕЛЬНО (Boolean не равно нулю)
+1

'случай, когда VALID - ЛОЖЬ ТОГДА «Действителен» ELSE P.REASON _FOR_INVALID end' – jarlh

+0

@jarlh Не забудьте 'END' :-) –

+1

@TimBiegeleisen, oops, thanks! Будет редактировать. – jarlh

ответ

2

Вы должны использовать CASE

The SQL CASE expression is a generic conditional expression, similar to if/else statements in other programming languages

CASE WHEN condition THEN result 
    [WHEN ...] 
    [ELSE result] 
END 

Так,

CREATE OR REPLACE VIEW VW_MONITOR_DEVICE AS 
    SELECT 
     P.POSIZIONE_DEVICE_ID AS MONITOR_DEVICE_ID, 
     P.VALID AS VALID, 
     [...] 
      CASE WHEN VALID = false THEN 'Valid' 
       ELSE P.REASON_FOR_INVALID 
      END AS DESCRIPTION, 

     [...] 
    FROM public.TA_POSIZIONI_DEVICE P 
    JOIN ... 
+1

Выражение case возвращает значение. Если/else - просто условное выполнение кода - и не имеет возвращаемого значения (т. Е. Похоже на оператор case.) – jarlh

-1

IF (VALID == FALSE) THEN 'Valid' ELSE P.REASON_FOR_INVALID END IF AS DESCRIPTION

Попробуйте это! У вас есть вопрос parenthensis в вас кондиционировать

+0

В SQL нет 'IF' –

+0

Я думаю, что он на postgresql http://www.postgresql.org/docs/9.1/ static/plpgsql-control-structures.html – airliquide

+2

Эта ссылка касается языка _procedural_ PL/pgSQL, это не о языке _query_ ** SQL **. Плюс: оператор сравнения в SQL (и PL/pgSQL) имеет значение '=', а не '==' –

1

вы можете использовать случай

case when VALID = FALSE THEN 'Valid' ELSE P.REASON_FOR_INVALID end DESCRIPTION, 
+0

, но он упоминает postgresql в теге –

+0

ok @a_horse_with_no_name –

+0

спасибо, правильный запрос с одним равным – Marco

Смежные вопросы