Може да сте го поправили с max
но това не е защо това се случва и е малко хакерско. Вашият проблем е, че вашата подзаявка, която се превежда в една колона, не е обобщена заявка, min
, макс.
, сума
и т.н. и затова трябва да бъде включен в group by
клауза. Поправихте това, като го обвихте в max
тъй като максимумът на една стойност винаги ще бъде постоянен.
Въпреки това, тъй като вашата подзаявка сама по себе си е аналитична заявка и ще върне само един ред, очевидното нещо, което трябва да направите, е да използвате декартово съединение, за да го добавите към вашата заявка. В изричния синтаксис на присъединяване това е известно като кръстосано присъединяванекод>
.
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
)
Декартовото съединение има лоша репутация, тъй като умножава броя на редовете от едната страна на съединението по броя на редовете от другата. Той обаче има своите приложения, особено в този вид случаи.