Bạn có thể đã sửa nó bằng max
nhưng đó không phải là tại sao nó đang diễn ra và hơi khó hiểu. Vấn đề của bạn là truy vấn phụ của bạn, được chuyển thành một cột duy nhất không phải là một truy vấn tổng hợp, min
, max
, sum
vv và do đó cần được đưa vào nhóm theo
mệnh đề. Bạn đã sửa lỗi này bằng cách gói nó trong max
vì giá trị tối đa của một giá trị sẽ luôn không đổi.
Tuy nhiên, vì bản thân truy vấn phụ của bạn là một truy vấn phân tích và sẽ chỉ trả về một hàng, điều hiển nhiên phải làm là sử dụng phép nối ca-ta để thêm nó vào truy vấn của bạn. Trong cú pháp kết hợp rõ ràng, điều này được gọi là kết hợp chéo
.
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
)
Phép nối cacte có một danh tiếng xấu vì nó nhân số hàng ở một bên của phép nối với số hàng ở bên kia. Tuy nhiên, nó có những công dụng, đặc biệt là trong trường hợp này.