Trigger

參數“和”不正確,屬性的總和值

  • June 25, 2019

請原諒打擾,但比較不會給我一個布爾值,因為屬性的總和不會返回整數值,而是 bigint。您如何將三個查詢的值相加?我嘗試使用 ‘UNION’ 和 + 但它給了我錯誤。

case when(--for example 8=8
/*8=*/      (select count(*) from voto where new.data=voto.data and 
voto_palese='favorevole') =(
/*=8*/       ((
   (select count(*) from voto where new.data=voto.data and 
voto_palese='favorevole')
    UNION(select count(*) from voto where new.data=voto.data and 
voto_palese='contrario') UNION 
    (select count(*) from voto where new.data=voto.data and 
voto_palese='astenuto'))/2)+1) and 
     (select count(*) from voto where new.data=voto.data 
and(voto.ddl=new.ddl or voto.mozione=new.mozione))
          )
then new.esito='approvato'
else new.esito='non approvato'
end, --esito, 


ERRORE:  l'argomento di AND deve essere di tipo booleano, non bigint
LINE 34:           (select count(*) from voto where new.data=voto.dat...
              ^
QUERY:  insert into public.votazione(
      mozione,
      ddl,
      codice,
      favorevoli,
      votanti,
      contrari,
      astenuti,
      esito,
      tipo_assemblea,
      seduta_numero,
      data,
      assenti,
      missione)                
values((select codice from mozione where codice=new.mozione and 
mozione.data=new.data),--mozione, 
(select titolo from ddl where titolo=new.ddl), --ddl, 
(select codice from ddl where new.ddl=ddl.titolo), --codice, 
(select count(*) from voto where new.data=voto.data and
                              voto_palese='favorevole'), --favorevoli, 
((select count(*) from voto where new.data=voto.data and
                              voto_palese='favorevole')
UNION(select count(*) from voto where new.data=voto.data and
                              voto_palese='contrario') UNION 
      (select count(*) from voto where new.data=voto.data and
                              voto_palese='astenuto')), --votanti, 
(select voto_palese from voto where data=new.data and 
voto_palese='contrario'), --contrari, 
(select voto_palese from voto where data=new.data and 
 voto_palese='astenuto'), -- astenuti, 
case when(--for example 8=8
/*8=*/      (select count(*) from voto where new.data=voto.data and 
voto_palese='favorevole') =(
/*=8*/       ((
   (select count(*) from voto where new.data=voto.data and 
voto_palese='favorevole')
    UNION(select count(*) from voto where new.data=voto.data and 
voto_palese='contrario') UNION 
    (select count(*) from voto where new.data=voto.data and 
voto_palese='astenuto'))/2)+1) and 
     (select count(*) from voto where new.data=voto.data 
and(voto.ddl=new.ddl or voto.mozione=new.mozione))
          )
then new.esito='approvato'
else new.esito='non approvato'
end, --esito, 
(select tipo_assemblea from ordine_del_giorno_ass_cam_e_sen where 
data=voto.data), --tipo_assemblea, 
(select seduta_numero from ordine_del_giorno_ass_cam_e_sen where 
data=voto.data), --seduta_numero, 
(SELECT data from ordine_del_giorno_ass_cam_e_sen where  
  new.tipo_assemblea=ordine_del_giorno_ass_cam_e_sen.tipo_assemblea and 
ordine_del_giorno_ass_cam_e_sen.data=voto.data), --data, 
(select count(*) from timbratura_giornaliera where presenze='Assente' and 
new.data=timbratura_giornaliera.data), --assenti, 
(select count(*) from timbratura_giornaliera where presenze='In missione' 
and new.data=timbratura_giornaliera.data) -- missione
)
 CONTEXT:  funzione PL/pgSQL inserimento_votazione() riga 4 a istruzione SQL

 ********** Error **********

 ERRORE: l'argomento di AND deve essere di tipo booleano, non bigint
  SQL state: 42804
 Context: funzione PL/pgSQL inserimento_votazione() riga 4 a istruzione SQL

您應該使用比較運算符,例如> < = >= <=

create table t (id int);
select case when (select count(*) from t) then 1 else 0 end

錯誤:CASE/WHEN 的參數必須是 boolean 類型,而不是 bigint LINE 1: select case when (select count(*) from t) then 1 else 0 end

select case when (select count(*) from t) > 0 then 1 else 0 end
                                         ^^^
| 案例 |
| ---: |
| 0 |

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/241331