web-dev-qa-db-fra.com

comment mettre une condition de casse imbriquée dans une requête postgresql

je veux écrire un cas imbriqué lorsque la condition dans la requête pour stocker la valeur qui proviendra d'un cas lorsque la condition et d'un autre cas lorsque la condition dans la même nouvelle colonne.pour obtenir ce type de résultat, j'écris la requête comme suit:

(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

dans la colonne ci-dessus, le nom demo.name provient de CTE. donc toute ma requête ressemble à:

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 ;

je veux juste stocker le nombre de colonnes (sq_name_new1) dans la colonne INDIVISUAL et le nombre de colonnes (demo.id) dans la même colonne, c'est-à-dire INDIVISUAL, si la première condition de cas ne correspond pas. mais lorsque j'exécute ma requête, cela génère une erreur. C'est-à-dire que quelque chose ne va pas dans la syntaxe de case when condition.

s'il vous plaît, aidez-moi à écrire la condition de cas imbriquée correcte.

12
shyarry g

CASE ... WHEN ... END est une expression. Il peut être imbriqué comme n'importe quelle autre expression.

CASE
     WHEN condition THEN
         CASE
             WHEN othercondition THEN
                 ....
         END
END
13
Craig Ringer

Le premier point-virgule ; devrait être supprimé comme dans la réponse de @Craig Ringer.

SELECT 
  CASE WHEN condition1 THEN
    CASE
      WHEN condition1.1 THEN
        ...
    END
  END AS column_name
FROM table_name;
1
Guoyang Qin