select *,group by ID ..不能分组* ---如何合并汇总统计?

时间:2017-10-18 18:38:28

标签: sql ms-access

我过去经常使用SAS。所以这对我试图在Access 2016中这样做很烦人。 表示例:

ID        Name      Sport
__________________________
99       Jack         Soccer
99       Jack Jim     Baseball
54       Bob          Basketball      

我想选择*,按ID计算ID和组,因此我可以添加一个显示重复ID的位置,因为笛卡尔匹配。

我想要的是:

ID        Name      Sport          ID_Count
______________________________________________
99       Jack         Soccer           2
99       Jack Jim     Baseball         2  
54       Bob          Basketball       1

但是,我收到的消息是我不能按*分组,因为由于某些原因,合并摘要统计信息是不可能的,但其他情况下的笛卡儿产品是。有解决方法吗?

3 个答案:

答案 0 :(得分:1)

SAS重新合并proc sql中的聚合结果是非标准语法。标准SQL支持窗口函数,它执行此操作。唉,MS Access不支持此标准功能。

类似的方法是聚合查询或相关子查询上的JOIN

select t.*,
       (select count(*) from t t2 where t2.id = t.id) as id_count
from t;

ANSI标准功能是:

select t.*, count(*) over (partition by id) as id_count
from t;

答案 1 :(得分:0)

您可以在ms access 2016中尝试此操作:

Select yourtable.*, q1.ID_Count from yourtable 
join (select id, count(id) as ID_Count from yourtable group by id having count(id)>1) q1 
on yourtable.id = q1.id

答案 2 :(得分:0)

为什么使用*只能列出你的字段并仍然使用该组?

SELECT ID, Name, Sport, Count([ID]) as [ID_Count]
FROM TableName
GROUP BY ID, Name, Sport

我将远离尝试在MS Access中通过查询使用*。可能会使简单的任务复杂化。