列“在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一个特定的值(例如, MIN
, SUM
或AVG
),在这种情况下,您将使用适当的聚合函数,或者要将每个值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? ...?
但是,以下两个查询清楚地说明了这一点,并不会导致错误:
-
使用聚合
SELECT A, COUNT(B) AS T1, SUM(B) AS B FROM T2 GROUP BY A
会返回:
A T1 B 1 2 92 2 3 68
-
将列添加到
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