访问按两个字段分组的SQL COUNT记录

时间:2015-10-11 15:42:28

标签: sql ms-access count group-by inner-join

表1

ID1  NAME
1    Pete
2    Andy
3    Mary

表2

SELECT name, letter
FROM table1 
INNER JOIN table2 ON table1.ID1 = table2.ID1
GROUP BY name, letter
HAVING COUNT(*) > 2;

Access中的SQL命令:

NAME  LETTER
Pete  A
Pete  B
Andy  R
Andy  S
Andy  T
Mary  Z

最终,我创建了一个产生这个问题的查询:

NAME  FIELD
Andy  R
Andy  S
Andy  T

我试图产生的输出只给那些个人以及相关的字母,这些字母有两个以上的条目归属于他们。如下所示:

textArray

但是当我按名称和字段分组时,每个唯一组合的计数只会为1,因此SQL在运行时不输出任何条目。

如果我单独尝试GROUP BY名称,请像我一样大喊我的查询不包含指定的表达式'字母'作为集合函数的一部分。

3 个答案:

答案 0 :(得分:0)

一种方法是仅对第一个表中的id进行聚合并加入它:

SELECT table2.name, table1.letter
FROM (table1 INNER JOIN
      table2 
      ON table1.ID1 = t2.ID1
     ) INNER JOIN
     (SELECT id1, COUNT(*) as cnt
      FROM table1
      GROUP BY id1
     ) as t1cnt
     ON t1.ID1 = t1cnt.ID1
WHERE t1cnt.cnt > 2

答案 1 :(得分:0)

使用CTE并先将其分组,然后加入以获取字母值,如下所示:

with CTE(name, ID1)
as(
SELECT name, table1.ID1 FROM table1 INNER JOIN table2 ON table1.ID1 = table2.ID1       GROUP BY name HAVING COUNT( * ) > 2
)
SELECT name, letter
FROM cte
INNER JOIN table2 ON cte.ID1 = table2.ID1

答案 2 :(得分:0)

这样的事情应该有效:

select name, letter
from table1
  inner join table2 on table1.id = table2.id
  inner join
    (select id
     from table1
     group by id
     having count(*) > 2) as t1 on t1.id = table1.id;