हो सकता है कि आपने इसे अधिकतम
. के साथ ठीक कर दिया हो लेकिन ऐसा नहीं है क्यों यह हो रहा है और थोड़ा हैकी है। आपकी समस्या यह है कि आपकी उप-क्वेरी, जो एकल कॉलम में बदल जाती है, एक समग्र क्वेरी नहीं है, मिनट
, अधिकतम
, योग
आदि और इसलिए एक समूह द्वारा
. में शामिल करने की आवश्यकता है खंड। आपने इसे अधिकतम
. में लपेट कर इसे ठीक किया है क्योंकि अधिकतम एकल मान हमेशा स्थिर रहेगा।
हालाँकि, जैसा कि आपकी उप-क्वेरी, स्वयं, एक विश्लेषणात्मक क्वेरी है और केवल एक पंक्ति लौटाएगी, स्पष्ट बात यह है कि इसे अपनी क्वेरी में जोड़ने के लिए कार्टेशियन जॉइन का उपयोग करना है। स्पष्ट जुड़ाव सिंटैक्स में इसे क्रॉस जॉइनके रूप में जाना जाता है। कोड>
।
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
)
कार्टेशियन जॉइन की खराब प्रतिष्ठा है क्योंकि यह जुड़ने के एक तरफ पंक्तियों की संख्या को दूसरी तरफ पंक्तियों की संख्या से गुणा करता है। हालाँकि, इसके उपयोग हैं, विशेष रूप से इस तरह के मामले में।