sql >> Databáze >  >> RDS >> Oracle

ORA-00937:Nejedná se o skupinovou funkci s jednou skupinou – chyba dotazu

Možná jste to opravili pomocí max ale to není proč děje se to a je to trochu špinavé. Váš problém je v tom, že váš dílčí dotaz, který se převádí do jednoho sloupce, není souhrnný dotaz, min , max , součet atd. a tak musí být zahrnuty do skupiny podle doložka. Opravili jste to zabalením do max protože maximum jedné hodnoty bude vždy konstantní.

Protože je však váš dílčí dotaz sám o sobě analytickým dotazem a vždy vrátí pouze jeden řádek, je zřejmé, že k jeho přidání do vašeho dotazu použijete kartézské spojení. V syntaxi explicitního spojení je to známé jako křížové spojení .

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
                      )

Kartézské spojení má špatnou pověst, protože násobí počet řádků na jedné straně spojení počtem řádků na druhé straně. Má však své využití, zvláště v tomto druhu případů.



  1. Spojte dvě tabulky sloupcem s více položkami pro druhou tabulku

  2. Jak vytvořit a používat dočasnou tabulku v uložené proceduře Oracle?

  3. Vytváření uložených procedur pomocí SQLAlchemy

  4. Jak implementovat nezávislost databáze pomocí Entity Framework