Du kanske har fixat det med max
men det är inte därför det händer och är lite hackigt. Ditt problem är att din underfråga, som översätts till en enda kolumn, inte är en samlad fråga, min
, max
, summa
etc och måste därför inkluderas i en grupp efter
klausul. Du fixade detta genom att slå in det i max
eftersom maxvärdet för ett enskilt värde alltid kommer att vara konstant.
Men eftersom din underfråga i sig är en analytisk fråga och bara kommer att returnera en rad, är det självklart att använda en kartesisk koppling för att lägga till den i din fråga. I den explicita kopplingssyntaxen är detta känt som korskoppling
kod>
.
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
)
Den kartesiska sammanfogningen har ett dåligt rykte eftersom den multiplicerar antalet rader på ena sidan av sammanfogningen med antalet rader på den andra. Det har dock sina användningsområden, särskilt i den här typen av fall.