Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Колоната е невалидна в списъка за избор, защото не се съдържа нито в агрегатна функция, нито в клаузата GROUP BY

С други думи, тази грешка ви казва, че SQL Server не знае кое B за да изберете от групата.

Или искате да изберете една конкретна стойност (например MIN , SUM или AVG ), в който случай ще използвате подходящата обобщена функция или искате да изберете всяка стойност като нов ред (т.е. включително B в GROUP BY списък с полета).

Помислете за следните данни:

ID  A   B
1   1  13
1   1  79
1   2  13
1   2  13
1   2  42

Заявката

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

ще върне:

A  T1
1  2
2  3

което всичко е наред.

Помислете обаче за следната (незаконна) заявка, която би довела до тази грешка:

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

И върнатият му набор от данни, илюстриращ проблема:

A  T1  B
1  2   13? 79? Both 13 and 79 as separate rows? (13+79=92)? ...?
2  3   13? 42? ...?

Следните две заявки обаче изясняват това и няма да причинят грешката:

  1. Използване на агрегат

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    

    ще върне:

    A  T1  B
    1  2   92
    2  3   68
    
  2. Добавяне на колоната към GROUP BY списък

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    

    ще върне:

    A  T1  B
    1  1   13
    1  1   79
    2  2   13
    2  1   42
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е блокиране на SQL Server?

  2. Кога е по-добре да съхранявате флагове като битмаска, вместо да използвате асоциативна таблица?

  3. Изчислете общата цена на притежание за мониторинг на SQL Server

  4. Използваната версия на SQL Server не поддържа тип данни datetime2?

  5. LEFT() срещу SET TEXTSIZE в SQL Server:Каква е разликата?