使用Access 2007。
我有一个表库存,其中包含以下字段:
数据筒 FolderID
我的目标是找出哪些FolderID对应于多个ContainerID,以及这些记录的ContainerID是什么。我认为处理此问题的最佳方法是执行返回ContainerID,FolderID和每个FolderID计数的查询,以便我可以对该列表进行排序,以将记录的计数设置为> 1。我试过这个:
select ContainerID,FolderID,count(FolderID) from (select distinct * from Inventory);
但是Access给了我一条错误消息:“您尝试执行的查询不包含指定表达式'ContainerID'作为聚合函数的一部分。”
如何获得我正在寻找的结果?
编辑: 我正在尝试你所有的解决方案,但所有这些解决方案都会继续获得大量重复行。我只是试图用DISTINCT过滤掉它们但由于某种原因冻结了Access。我必须回家,所以明天早上我会再检查这些。感谢您提供建议。
答案 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而不是多行。