Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

chcę uzyskać całą kolumnę tabeli Konta z tym zapytaniem, ale daje błąd

Twoje zapytanie zawiera klauzulę group by. Jeśli w zapytaniu użyjesz klauzuli group by, to każda kolumna w instrukcji select musi wykonać jedną z dwóch rzeczy - albo musi być częścią listy group by, albo musi być pewnego rodzaju agregatem (Sum , liczba, średnia, maksymalna itd.). Jeśli tego nie zrobisz, SQL nie będzie wiedział, co zrobić z kolumną. W twoim przypadku Accounts.regno i Accounts.model są wymienione w zaznaczeniu, ale nie znajdują się w klauzuli group by i nie są agregacjami - stąd Twój błąd.

Załóżmy na razie, że masz dwa rekordy konta z tą samą nazwą konta i slacc, ale z innym Regno (lub modelem). Klauzula group by mówi, że muszą one zostać połączone w jeden rekord do wyświetlenia, ale nie powiedziałeś SQLowi, jak to zrobić. Nie ma znaczenia, jeśli dane nie są takie, SQL najpierw szuka możliwych błędów.

W takim przypadku prawdopodobnie chcesz po prostu zgrupować wszystkie szczegóły. Najprostszym sposobem jest upewnienie się, że wszystkie kolumny potrzebne do grupy są dodawane w następujący sposób

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

To naprawi błąd, ale spowoduje dodatkowe grupowanie, którego nie potrzebujesz, i byłoby bardzo kłopotliwe, gdybyś miał dużo więcej kolumn, które chciałbyś z konta, ponieważ musiałbyś dodać je wszystkie. Innym sposobem radzenia sobie z tym jest użycie minimalnej liczby kolumn dla zapytania grupowego, a następnie połączenie wyniku tego z zapytaniem głównym, aby uzyskać inne kolumny. To prawdopodobnie wyglądałoby mniej więcej tak

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONVERT() vs TRY_CONVERT w SQL Server:jaka jest różnica?

  2. Jak zmienić ustawienia konfiguracji poczty bazy danych w programie SQL Server (T-SQL)

  3. Jak znaleźć sortowanie bazy danych obsługiwane przez instancję SQL Server?

  4. Jak rzucić DateTime na czas?

  5. Jak skopiować tabele unikając kursorów w SQL?