2014-02-20 395 views
5

如何通過在MS訪問。我谷歌實現對分區中的行號,但無法找到信息,您可以取悅如何做到這一點實現ROW_NUMBER/PARTITION BY在MS Access

RowNumber Over(Partition by city Order By EmployeeID) 

我的數據是這樣的

DOC_TYPE Ino 
3a 1800xxc1 
3b 1810xxc2 
3c 1700xxc3 
3a 1700xxc4 
3a 1800xxc5 
3a 1800xxc6 
3b 1800xxc7 

我需要一個像這樣

DOC_TYPE Ino Seq 
3a 1800xxc1 1 
3a 1700xxc4 2 
3a 1800xxc5 3 
3a 1800xxc6 4 
3b 1810xxc2 1 
3b 1800xxc7 2 
3c 1700xxc3 1 

這是我的查詢

SELECT t1.RT_TAXCODE, t1.INV_NO, COUNT(*) AS Sno 
FROM GroupByTAXCODE AS t1 INNER JOIN GroupByTAXCODE AS t2 ON (t2.RT_TAXCODE = t1.RT_TAXCODE) AND (t2.Inv_no <= t1.Inv_no) 
GROUP BY t1.RT_TAXCODE, t1.INV_NO 
HAVING COUNT(*)=1 
ORDER BY 1, 3; 

這是花更多的時間爲f30秒

+0

你沒發現什麼了嗎?如果我谷歌搜索(通過分區訪問row_number),我發現第一個鏈接說,Access不支持這個約定(最初來自Oracle)。但提供了一些解決方法。 http://www.tek-tips.com/viewthread.cfm?qid=1615753 –

+0

[GroupByTAXCODE]本身是一個查詢(而不是實際的表)? –

+0

是的,這是一個查詢 – saikri

回答

6

在很多情況下,我們可以通過執行不平等自連接在桌子上和綜合這些結果實現了類似的結果。例如,對於表中的數據名爲[邁德特]

Ino TYPE  DOC 
--- -------- --- 
    1 1800xxc1 3a 
    2 1810xxc2 3b 
    3 1700xxc3 3c 
    4 1700xxc4 3a 
    5 1800xxc5 3a 
    6 1800xxc6 3a 
    7 1800xxc7 3b 

查詢

SELECT 
    t1.DOC, 
    t1.TYPE, 
    COUNT(*) AS [Ino Seq] 
FROM 
    MyData AS t1 
    INNER JOIN 
    MyData AS t2 
     ON t2.DOC = t1.DOC 
      AND t2.Ino <= t1.Ino 
GROUP BY 
    t1.DOC, 
    t1.TYPE 
ORDER BY 1, 3 

回報

DOC TYPE  Ino Seq 
--- -------- ------- 
3a 1800xxc1  1 
3a 1700xxc4  2 
3a 1800xxc5  3 
3a 1800xxc6  4 
3b 1810xxc2  1 
3b 1800xxc7  2 
3c 1700xxc3  1 
+0

Im得到空記錄,我的員工id是字符串,City也是字符串 – saikri

+0

@saikri如果你的[EmployeeID]是'Text',它應該沒有什麼區別。我建議你[編輯](http://stackoverflow.com/posts/21917637/edit)你的問題,包括一些示例數據和你試圖使用的查詢。 –

+0

現在請檢查。 – saikri