max
で修正した可能性があります しかし、それは理由ではありません それは起こっており、少しハッキーです。問題は、単一の列に変換されるサブクエリが集計クエリ min
ではないことです。 、 max
、 sum
などなど、 group by
に含める必要があります 句。 max
でラップすることでこれを修正しました 単一の値の最大値は常に一定であるためです。
ただし、サブクエリはそれ自体が分析クエリであり、1行しか返さないため、明らかに行うべきことは、デカルト結合を使用してクエリに追加することです。明示的な結合構文では、これは相互結合として知られています。コード>
。
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
)
デカルト結合は、結合の一方の行数にもう一方の行数を掛けるため、評判が悪くなります。ただし、特にこの種の場合には、用途があります。