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

Nie można użyć agregacji ani podzapytania w wyrażeniu używanym dla listy grupuj według klauzuli GROUP BY

Chyba że dołączysz T.Client w Twojej GROUP BY , możesz uwzględnić to pole tylko w funkcji agregującej. W twoim przypadku grupowanie według tego pola zmienia logikę, więc jest to nieaktualne (i jest powiązane z twoją próbą grupowania według instrukcji CASE). Zamiast tego zapakuj T.Client w funkcji agregującej.

W ten sposób twoje grupy są nadal takie same, a gdy jest tylko jeden wiersz, zgodnie z testem twojego wyrażenia CASE, wiesz, jaki wynik da funkcja agregacji.

SELECT
  T.Post,
  ClientCount = COUNT(*) AS ClientCount,
  Client      = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
FROM
  MyTable T
GROUP BY
  T.Post


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wstawić 1000 losowych dat pomiędzy podany zakres?

  2. Wskazówki dotyczące korzystania z SQL Server z Salesforce SOQL

  3. Dlaczego SQL Server używa skanowania indeksu zamiast wyszukiwania indeksu, gdy klauzula WHERE zawiera wartości sparametryzowane?

  4. Wszystkie możliwe kombinacje dla danych dwukolumnowych

  5. Błąd potwierdzenia uzgadniania uzgadniania przed logowaniem w programie SQL Server