2016-11-24 1 views
2

Я хочу написать вложенный случай, когда условие в запросе для хранения значения, которое будет поступать из одного случая, когда условие и другой случай, когда условие в тот же новый столбец. Получить этот вид результата я пишу запрос, как:как положить вложенное case-when условие в postgresql-запрос

(case when sq_name_new1 like format('%%%s%%',demo.name) THEN count(sq_name_new1) else (when demo.empcode is not null then count(demo.id) End) END) AS indivisual from res_scheduledjobs 

в приведенном выше столбце demo.name запрос приходит из CTE.so весь мой взгляд, как запрос:

with demo(empcode,id,name) as    
(select hr_employee.emp_code,hr_employee.id,concat(resource_resource.name,' ',hr_employee.middle_name,' ',hr_employee.last_name) as name from hr_employee inner join resource_resource on resource_resource.id=hr_employee.resource_id) 
select demo.empcode,demo.name,sq_name_new1,(case when sq_name_new1 like format('%%%s%%',demo.name) THEN count(sq_name_new1) else (when demo.empcode is not null then count(demo.id) End) END) AS indivisual from res_scheduledjobs LEFT JOIN demo on demo.id=res_scheduledjobs.assigned_technician group by res_scheduledjobs.assigned_technician,sq_name_new1,demo.empcode,demo.name ; 

я просто хочу, чтобы сохранить счетчик (sq_name_new1) в столбцы INDIVISUAL Column и count (demo.id) в тот же столбец, t hat находится в INDIVISUAL, если условие первого случая не совпадает. , но когда я выполняю свой запрос, он выдает ошибку. Это что-то не так в синтаксисе случая, когда условие.

, пожалуйста, помогите мне написать правильный вложенный случай-когда условие.

+0

Просто используйте 'СЛУЧАЙ, КОГДА ТО ... КОГДА THEN ... ELSE ' ... но вы должны форматировать ваш запрос и там могут быть и другие проблемы там. –

ответ

4

CASE ... WHEN ... END - выражение. Он может быть вложен как любое другое выражение.

CASE 
    WHEN condition THEN 
     CASE 
      WHEN othercondition THEN 
       .... 
     END; 
END; 
+0

Должен ли я добавить ';' за 'END' вложенного' CASE WHEN' внутри? –

0

Первая точка с запятой ; должен быть удален в ответ @Craig Рингера.

SELECT 
    CASE WHEN condition1 THEN 
    CASE 
     WHEN condition1.1 THEN 
     ... 
    END 
    END AS column_name 
FROM table_name; 
Смежные вопросы