Možná jste to opravili pomocí max
ale to není proč děje se to a je to trochu špinavé. Váš problém je v tom, že váš dílčí dotaz, který se převádí do jednoho sloupce, není souhrnný dotaz, min
, max
, součet
atd. a tak musí být zahrnuty do skupiny podle
doložka. Opravili jste to zabalením do max
protože maximum jedné hodnoty bude vždy konstantní.
Protože je však váš dílčí dotaz sám o sobě analytickým dotazem a vždy vrátí pouze jeden řádek, je zřejmé, že k jeho přidání do vašeho dotazu použijete kartézské spojení. V syntaxi explicitního spojení je to známé jako křížové spojení
.
select count(*) todas
, sum(case when i.prioridade = 1 then 1 else 0 end) urgente
, sum(case when i.prioridade = 2 then 1 else 0 end) alta
, sum(case when i.prioridade = 3 then 1 else 0 end) normal
, sum(case when i.prioridade = 4 then 1 else 0 end) baixa
, naoAvaliados
, sum(case when i.situacao = 'P' then 1 else 0 end) pendentes
, sum(case when i.situacao = 'A' or i.situacao = 'I' then 1 else 0 end) iniciados
from GMITEMOS i
cross join (select count(*) as naoAvaliados
from GMITEMOS j
inner join GMCTLSLA k
on k.os = j.cd_numero_os
and k.item = j.item
where j.situacao in ('A', 'I', 'P')
and k.ordem = 99999
)
where i.situacao in ('A', 'I', 'P')
and exists (select 1
from GMCTLSLA c
where c.os = i.cd_numero_os
and c.item = i.item
)
Kartézské spojení má špatnou pověst, protože násobí počet řádků na jedné straně spojení počtem řádků na druhé straně. Má však své využití, zvláště v tomto druhu případů.