在Access SQL查询中使用count()时遇到问题

时间:2011-03-31 23:01:14

标签: sql ms-access

使用Access 2007。

我有一个表库存,其中包含以下字段:

数据筒 FolderID

我的目标是找出哪些FolderID对应于多个ContainerID,以及这些记录的ContainerID是什么。我认为处理此问题的最佳方法是执行返回ContainerID,FolderID和每个FolderID计数的查询,以便我可以对该列表进行排序,以将记录的计数设置为> 1。我试过这个:

select ContainerID,FolderID,count(FolderID) from (select distinct * from Inventory);

但是Access给了我一条错误消息:“您尝试执行的查询不包含指定表达式'ContainerID'作为聚合函数的一部分。”

如何获得我正在寻找的结果?

编辑: 我正在尝试你所有的解决方案,但所有这些解决方案都会继续获得大量重复行。我只是试图用DISTINCT过滤掉它们但由于某种原因冻结了Access。我必须回家,所以明天早上我会再检查这些。感谢您提供建议。

4 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

SELECT ContainerID, FolderID, count(FolderID) 
FROM    Inventory 
GROUP BY ContainerID, FolderID; 

您需要GROUP BY用于计数功能才能使用特定的分组,否则它将对所有可用数据进行操作。除非你只有一个独特的ContainerID和amp;组合。 FolderID,您无法选择这些字段以及聚合函数'count'的结果。

答案 1 :(得分:1)

尝试以下查询。

select
     I.*
    ,T.FolderCount
from
    Inventory I
inner join
(
    select
          ContainerID
        , Count(*) as FolderCount
    from
        Inventory
    group by
        ContainerID
    having
        Count(*) > 1
) T
on
    I.ContainerID = T.ContainerID

修改

select
     I.*
    ,T.ContainerCount
from
    Inventory I
inner join
(
    select
          FolderID
        , Count(*) as ContainerCount
    from
        Inventory
    group by
        FolderID
    having
        Count(*) > 1
) T
on
    I.FolderID = T.FolderID

答案 2 :(得分:1)

步骤1:获取具有多个ContainerID的FolderID:

select folderid 
from inventory 
group by folderid 
having count(folderid)>1

步骤2:获取所有这些FolderID及其相应ContainerID的列表:

select * 
from inventory 
where folderid in
(
   select folderid 
   from inventory 
   group by folderid 
   having count(folderid)>1
)
order by folderid, containerid

答案 3 :(得分:0)

不幸的是我没有访问2007,但在sql server中有以下工作:

create table Inventory
(
 ContainerID int,
 FolderID int
)

insert into Inventory (ContainerID, FolderID)
select 1, 1
union all select 1, 2
union all select 1, 3
union all select 1, 1
union all select 2, 1
union all select 2, 2
union all select 3, 1

select distinct i1.ContainerID, i1.FolderID
from Inventory i1
inner join (select FolderID
            from Inventory a
            group by FolderID
            having count(distinct ContainerID) > 1) i2
on i1.FolderID = i2.FolderID

添加了示例以澄清我提交此答案的原因。根据我对问题的理解,结果是容器/文件夹对是多个containerID而不是多行。