sql >> Databáze >  >> RDS >> Sqlserver

Chci tímto dotazem získat všechny sloupce tabulky účtů, ale dává chybu

Váš dotaz má skupinu podle klauzule. Pokud v dotazu použijete klauzuli group by klauzule, pak každý sloupec v příkazu select musí dělat jednu ze dvou věcí – buď musí být součástí skupiny podle seznamu, nebo to musí být nějaký agregát (Sum , Počet, Průměr, Max atd.). Pokud to neuděláte, SQL nebude vědět, co se sloupcem dělat. Ve vašem případě jsou Accounts.regno a Accounts.model uvedeny ve výběru, ale nejsou ve skupině podle klauzule a nejsou to souhrny – proto vaše chyba.

Předpokládejme v tuto chvíli, že máte dva záznamy účtu se stejným názvem účtu a slacc, ale odlišným Regno (nebo modelem). Skupina po klauzuli říká, že pro zobrazení musí být spojeny do jednoho záznamu, ale neřekli jste SQL, jak to udělat. Nezáleží na tom, pokud data nejsou taková, SQL nejprve hledá možné chyby.

V tomto případě budete pravděpodobně chtít seskupit všechny podrobnosti. Nejjednodušší způsob je zajistit přidání všech potřebných sloupců do skupiny takto

select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, count(servicing.dt) as total 
from Accounts 
   left outer join servicing on Accounts.slacc = servicing.slacc 
group by Accounts.slacc, Accounts.name, Accounts.regno, Accounts.model

Tím se chyba opraví, ale nepotřebujete další seskupení a bylo by velmi těžkopádné, kdybyste měli z účtu mnohem více sloupců, protože byste je museli všechny přidat. Dalším způsobem, jak to zvládnout, je použít minimální počet sloupců pro skupinový dotaz a poté spojit výsledek s vaším hlavním dotazem, abyste získali další sloupce. To by asi vypadalo nějak takto

select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, Totals.Total 
from Accounts
   left outer join 
     ( Select slacc, count(dt) as total
       from servicing
       group by slacc
     ) Totals on Totals.slacc = Accounts.slacc



  1. Správa uživatelů databáze:Správa rolí pro MariaDB

  2. Jak zjistit stav replikace MySQL pomocí výběrového dotazu?

  3. UNION mysql dává podivné číslované výsledky

  4. T-SQL seskupuje řádky do sloupců