![](/img/trans.png)
[英]SQL query in Access to count records on the subset of of non-primary fields
[英]Access SQL COUNT records grouped by two fields
表格1
ID1 LETTER
1 A
1 B
2 R
2 S
2 T
3 Z
表2
ID1 NAME
1 Pete
2 Andy
3 Mary
Access中的SQL命令:
SELECT name, letter
FROM table1
INNER JOIN table2 ON table1.ID1 = table2.ID1
GROUP BY name, letter
HAVING COUNT(*) > 2;
最終,我創建了一個查詢,生成了以下內容:
NAME LETTER
Pete A
Pete B
Andy R
Andy S
Andy T
Mary Z
我正在嘗試產生僅給那些擁有兩個以上條目的個人以及相關字母的輸出。 因此,如下所示:
NAME FIELD
Andy R
Andy S
Andy T
但是,當我按名稱AND字段分組時,每個唯一組合的計數僅為1,因此SQL在運行時不輸出任何條目。
如果我嘗試僅使用GROUP BY名稱,則會像我一樣大喊,我的查詢沒有將指定的表達式“ letter”作為聚合函數的一部分。
一種方法是僅對第一個表中的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
使用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
這樣的事情應該起作用:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.