2011-07-04 173 views
1

下面是一個示例數據集訪問過濾器需要

----------------------------------------------------------------------------------------- 
id nameid name  score   diff   include  quantity  grade 
--------------------------------------------------------------------------------------- 

7  0002  MO   10   0    0   25   3 
8  0002  MO   18   0    1   25   3 
9  0002  MO   20   0    0   25   3 
10 0002  MO   14   0    0   17   6 
11 0002  MO   100   0    0   17   6 
11 0002  MO   100   0    0   17   6 

12 0003  MA   10   0    0   12   3 
13 0003  MA   18   0    0   12   3 
14 0003  MA   20   0    0   12   3 
15 0003  MA   14   0    0   25   6 
16 0003  MA   100   0    1   25   6 
17 0003  MA   100   0    0   25   6 

12 0004  MB   10   0    0   12   3 
13 0004  MB   18   0    1   12   3 
14 0004  MB   20   0    0   12   3 
15 0004  MB   14   0    0   07   6 
16 0004  MB   100   0    1   07   6 
17 0004  MB   100   0    0   07   6 

我有返回上面的表的查詢。 請注意,在每六個組中,在include列中將有至少一行的值爲1。 看看ref:access query needed但不是必需的。

同樣對於每個六個組,有三個行有grade = 3和3個行有grade = 6。 並且相應地,該組中的grade 3grade 6具有相同的數量。

我想要做的是過濾掉所有少於15個數量的行。 然而,我仍然希望將它們組由6

我想刪除同時具有quantity < 15兩個級3和6從上面的數據集 我wwant以下結果的「基團」:

----------------------------------------------------------------------------------------- 
id nameid name  score   diff   include  quantity  grade 
--------------------------------------------------------------------------------------- 

7  0002  MO   10   0    0   25   3 
8  0002  MO   18   0    1   25   3 
9  0002  MO   20   0    0   25   3 
10 0002  MO   14   0    0   17   6 
11 0002  MO   100   0    0   17   6 
11 0002  MO   100   0    0   17   6 

12 0003  MA   10   0    0   12   3 
13 0003  MA   18   0    0   12   3 
14 0003  MA   20   0    0   12   3 
15 0003  MA   14   0    0   25   6 
16 0003  MA   100   0    1   25   6 
17 0003  MA   100   0    0   25   6 

所以基本上如果一組六個人有include = 1在任何一行,並且要麼3級或6級quantity > 15那麼我想整個組。

+0

「nameid」列可以有多達6個相同的名稱。 – masfenix

+0

我已經編輯了幾個專欄,我應該在 – masfenix

回答

1

因此,基本上,如果六個一組的已包括在任何行= 1,並且或者3級或6數量> 15然後我想整個組。

我的猜測是該查詢將識別候選填充NameID組:

SELECT DISTINCT nameid 
FROM YourTable 
WHERE 
    include = 1 
    AND quantity > 15 
    AND (grade = 3 OR grade = 6); 

如果我猜對了,你可以將其保存爲一個單獨的查詢,或者使用它作爲一個子查詢和內其加入到YourTable限制返回的行只有那些填充NameID滿足你的標準。它看起來接近這個未經測試的SELECT語句:

SELECT y.id, y.nameid, y.[name], y.score, y.diff, y.include, y.quantity, y.grade 
FROM 
    YourTable AS y 
    INNER JOIN [ 
     SELECT DISTINCT nameid 
     FROM YourTable 
     WHERE 
      include = 1 
      AND quantity > 15 
      AND (grade = 3 OR grade = 6) 
     ]. AS q 
     ON y.nameid = q.nameid 
ORDER BY y.nameid; 

編輯:在添加填充NameID索引,如果你不已經有一個。

+0

之前完成,我認爲這很有效。只需要對此進行質量檢查。然而,它有點慢。我無法在表上添加索引,因爲表本身是另一個查詢。 – masfenix

+0

如果沒有其他實用的解決方案,請考慮創建一個輔助表來保存這些DISTINCT nameid值。你可以將這個查詢轉換爲「附加查詢」...... INSERT INTO AuxTable(nameid)SELECT DISTINCT nameid FROM YourTable ...'然後INNER JOIN YourTable與AuxTable ON nameid。這種方法不是我的第一選擇,但是如果它提供了足夠的性能改進,並且你找不到更好的方法,那就試試吧。 :-) – HansUp