SQL server选择A. *,count(b)group by

时间:2013-09-27 05:39:05

标签: sql-server sql-server-2005

我想在sql server上运行一个查询,用另一个表中的聚合选择表(tableA)中的所有元素

select a.*,  count(b.number) from tableA a
inner join tableB b on a.id = b.a_id
group by a.id;

这会出现以下错误:

  

错误:列'a.id'在选择列表中无效,因为它不是   包含在聚合函数或GROUP BY子句中。

     

SQLState:S1000
  ErrorCode:8120

获得我想要的正确查询是什么?

5 个答案:

答案 0 :(得分:1)

您可以使用

select a.*, x.number
from tableA a
inner join
   (select b.a_id, count(b.number) number
   from tableB b
   group by b.a_id) x
on x.a_id = a.id

答案 1 :(得分:0)

select a.*,  
      (Select count(b.number) from tableB b where b.a_id = a.id) as "b count"
   from tableA a;

答案 2 :(得分:0)

在具有分组依据的查询中,所有列都应显示聚合函数或逐列提示。 您的错误是因为除了id之外,您的表'a'列不是按列表分组的,并且不会出现聚合函数。

答案 3 :(得分:0)

select a.*, B.number
from tableA a
inner join
(
a.id a_id,  count(b.number) number from tableA a
inner join tableB b on a.id = b.a_id
group by a.id;
) B on B.a_id = a.id 

答案 4 :(得分:0)

因为您使用a.*选择了tableA中的所有列。使用aggrgate函数grouby或其他任何内容时,您必须在group by子句中提及列名。试试这种方式

select a.id,a.name,  count(b.number) from tableA a
inner join tableB b on a.id = b.a_id
group by a.id,a.name

如果要从tableA中选择所有列,则无法使用group by。

select a.*,  count(b.number) from tableA a
inner join tableB b on a.id = b.a_id