2014-03-27 109 views
0

我在Excel中工作,但它確實需要移入Access,因爲這是數據庫其餘部分所在的位置。MS Access Small Equivalent

它包含UNIQUE_ID,賣家和水果只是一個表...

1 Chris  Orange 
2 Chris  Apple 
3 Chris  Apple 
4 Sarah  Kiwi 
5 Chris  Pear 
6 Sarah  Orange 

最終的結果應該由賣方顯示,然後賣給每個水果的清單(在下面的例子羅伯特還沒有賣出任何水果,我都有一個所有賣家名字的列表,但這個例子中可以忽略,因爲我相信這很容易整合。)他們最多隻能賣20個水果。

Seller 1st   2nd  3rd  4th 
Chris Orange Apple Apple Pear 
Sarah Kiwi  Orange 
Robert 

目前,Excel使用Index,Match和Small來返回結果。小號僅用於Unique_ID以查找第一,第二,第三等等最小條目,並與每個賣家名稱相匹配以建立上述結果。

由於Access沒有一個小功能我很茫然!在現實中,有超過10萬條記錄(最小)超過4000賣家....他們也沒有水果:)

+0

您是否正在嘗試重新創建您在Excel中創建的數據透視表到Access中?在你的第二個數據示例中,1,2,3是否與第一個例子中的1,2,3相對應? – Brad

+0

嗨,不,他們沒有。 1,2,3 ...意思是第一種水果的銷售,第二,第三等...獨特的ID總是在銷售順序,因此在Excel中使用小的原因。我已經更新了示例 – Chris

+0

這是一個可怕的數據模型vs列「桔子」,「蘋果」,「梨」,這是int。如果有人鍵入「蘋果」與「蘋果」 - 呃......人類! – SQLMason

回答

1
TRANSFORM First(Sales.Fruit) AS FirstOfFruit 
SELECT Sales.Seller 
FROM Sales 
GROUP BY Sales.Seller 
PIVOT DCount([id],"sales","seller='" & [seller] & "' and id<=" & [id]); 

在表格的名稱是「銷售」和列「ID」,「賣家「和‘果’

+0

夢幻般的,不是100%確定在DCount上,但是我會閱讀並弄清楚你在那裏做了什麼!只有其他的補充是,我用樞軸後的「IN」排序列 – Chris

+0

嗯,我不明白的是第一個標準......我希望它總是選擇每個賣家的第一個記錄...如何這是否工作? – Chris

+1

交叉表查詢需要爲該值選擇的字段的公式 - 它不能是分組。因此,對於文本數據,我只是簡單地使用「第一」 - 通常它會對數字數據進行「求和」,這當然不適用於文本。 –

1

爲了更好地理解DCOUNT,使用它是一個SELECT查詢,而不是一個交叉表:

SELECT Sales.ID, Sales.Seller, Sales.Fruit, DCount([id],"sales","seller='" & [seller] & "' and id<=" & [id]) AS N 
FROM Sales; 

在每一行,最後一列是DCOUNT結果。語法是DCount(field,source,expression),所以它計算Sales表(源)中與表達式匹配的ID(字段) - 換句話說,與該行的記錄具有相同的銷售者,ID爲< =當前行的ID。因此,對於克里斯的銷售情況,儘管莎拉在中間出售,但他們將其數字從1到4。

從這個結果中,可以很容易地進行一個交叉表查詢,該查詢使該行中的賣家與該列中的N成爲一個表 - 按照您希望看到它們的方式爲每個賣家訂購銷售。 「First」函數爲結果的每個行和列找到賣家和N的組合的第一個結果。您可以在這裏輕鬆使用「Max」或「Min」 - 任何文本功能。當然,只有一條記錄與賣家行和N列匹配,但是交叉表查詢需要一個函數來評估,並且不能使用「分組依據」作爲值選擇的字段。

我的第一個答案在一個查詢中結合了這些步驟 - select和crosstab查詢。

希望這會有所幫助。