列“在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中”

我想在我的下面的SQL显示列B ,但是当我将它添加到查询它给我以下错误:

列T2.B'在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我的代码:

 SELECT A, COUNT(B) as T1, B FROM T2 WHERE ID=1 GROUP BY A 

换句话说,这个错误告诉你,SQL Server不知道哪个 B可以从组中select。

要么select一个特定的值(例如, MINSUMAVG ),在这种情况下,您将使用适当的聚合函数,或者要将每个值select为新行(即在GROUP BY字段列表中包括B )。


考虑以下数据:

 ID AB
 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 

会返回:

一个T1
 1 2
 2 3

这一切都很好。

但是,请考虑以下(非法)查询,这会产生此错误:

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

其返回的数据集说明了问题:

 A T1 B
 1 2 13?  79?  13和79都是分开的行吗?  (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