2014-02-20 48 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