2011-03-31 128 views
0

使用count()使用Access 2007有麻煩訪問SQL查詢

我有一個具有以下字段的表清單:

數據筒 FolderID

我的目標是找出哪些FolderIDs對應於多個ContainerID以及這些記錄的ContainerID。我認爲處理這種情況的最佳方法是執行一個查詢,該查詢返回ContainerID,FolderID和每個FolderID的計數,以便我可以對該列表進行排序,以將計數> 1的記錄置於頂部。我試圖與:

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

但訪問給了我一個錯誤信息:「試圖執行一個查詢,不包括指定表達式‘數據筒’作爲一個聚合功能的一部分。」

我如何得到我要找的結果?

編輯: 我正在嘗試所有的解決方案,但他們都保持了很多重複的行。我試圖用DISTINCT過濾它們,但由於某些原因凍結了Access。我必須回家,明天早上再檢查一遍。感謝您提供建議。

回答

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 
+0

我試過了,但是它返回了很多結果,其中FolderID對於許多不同的ContainerID是相同的。我試圖用另一種方式獲得它 - 對於每個FolderID,我想知道它對應的是哪個ContainerID,只要存在多個ContainerID即可。 – sigil 2011-03-31 23:52:53

+0

我明白了。更新了代碼。看看是否有幫助。 – 2011-04-01 00:48:08

+0

好吧,這是消除重複的條目,但我仍然得到的結果只存在一個FolderID的單個實例。我只想返回與多個ContainerID發生的FolderID。例如。如果我的設置是F1 C1,F1 C2,F2 C3,F2 C3那麼我想返回F1 C1,F1 C2。現在查詢返回F1 C1,F1 C2,F2 C3。 – sigil 2011-04-01 15:00:19

4

這應該做的伎倆:

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

您需要GROUP BY爲計數功能具有特定團體的工作,否則對所有可用數據進行操作。除非您只有一個ContainerID & FolderID的唯一組合,否則不能選擇這些字段以及聚合函數「count」的結果。

+0

這是一個基本問題 - 對於OP的實際需求,其他答案可能更爲正確,但聚合查詢_must_的'SELECT'子句中的所有字段要麼聚合,要麼出現在GROUP BY子句中。 – RolandTumble 2011-04-01 17:19:01

1

第1步:其中有一個以上的數據筒的FolderIDs:

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

第2步:獲取所有這些FolderIDs的名單及其相應的ContainerIDs:

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

不幸的是我不噸訪問2007年,但在SQL服務器以下工作:

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 

添加示例fo r澄清爲什麼我提交了這個答案。從我對問題的理解中得出的結果是,具有多個containerID的容器/文件夾對不是多行。