come mettere nested case-quando la condizione nella query per postgresql

voglio scrivere nidificati caso quando la condizione nella query per memorizzare il valore di un caso in cui la condizione e l’altro caso, quando la condizione nella stessa colonna.per ottenere questo tipo di risultato che sto scrivendo la query come:

(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

nella query precedente demo.la colonna del nome deriva dal CTE.così tutta la mia query simile:

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 ;

voglio solo memorizzare il conte di (sq_name_new1) colonna in INDIVISUAL Colonna e il conte di (demo.id di colonna in colonna,che è in INDIVISUAL,se il primo caso la condizione non corrisponde.
ma quando sono in esecuzione della query che genera un errore.che è,c’è qualcosa di sbagliato nella sintassi del caso, quando la condizione.

si prega di aiutare me yo scrivere la corretta nested case-quando la condizione.

  • Basta usare CASE WHEN <condition1> THEN ... WHEN <condition2> THEN ... ELSE <else> … ma si deve formattare la query e ci possono essere altri problemi.
InformationsquelleAutor shyarry g | 2016-11-24

 

2 Replies
  1. 12

    CASE ... WHEN ... END è un’espressione. Può essere annidato come qualsiasi altra espressione.

    CASE
         WHEN condition THEN
             CASE
                 WHEN othercondition THEN
                     ....
             END
    END
    • Devo aggiungere il ; dietro END nidificate CASE WHEN all’interno?
    • No, buona cattura. Avevo dimenticato che non era la scrittura di pl/pgsql. Risolto.
  2. 1

    Il primo punto e virgola ; dovrebbe essere rimosso in @Craig Ringer risposta.

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

Lascia un commento