【问题标题】:Achieving ROW_NUMBER / PARTITION BY in MS Access在 MS Access 中实现 ROW_NUMBER / PARTITION BY
【发布时间】:2014-03-21 23:25:57
【问题描述】:

如何在 MS 访问中使用“Row number over partition by”?我用谷歌搜索了它,但找不到任何关于如何进行此操作的信息。我说的是这个特殊的函数,它为结果集分区内的每一行分配一个连续的整数:

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;

这需要更多时间,因为 f 30 秒

【问题讨论】:

  • 你什么也没找到?如果我用 Google 搜索(通过分区访问 row_number),我发现的第一个链接显示 Access 不支持此约定(最初来自 Oracle)。但是提供了一些解决方法。 tek-tips.com/viewthread.cfm?qid=1615753
  • [GroupByTAXCODE] 本身是一个查询(而不是一个实际的表)吗?

标签: sql ms-access ms-access-2010


【解决方案1】:

在许多情况下,我们可以通过对表执行不相等的自连接并聚合结果来获得类似的结果。例如,对于名为 [MyData] 的表中的数据

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

【讨论】:

  • 我的记录是空的,我的员工ID是字符串,城市也是字符串
  • @saikri 如果您的 [EmployeeID] 是 Text,应该没有任何区别。我建议您edit您的问题包括一些示例数据和您尝试使用的查询。
  • @saikri 请编辑您的问题以显示您实际使用的查询。
  • @saikri re:“我有 17000 条记录,所以花了很长时间” - 我刚刚测试了 100,000 行的查询,在我的旧测试盒上运行大约需要 8 秒。您的执行时间是否比这长得多?
  • 编辑了我有问题的查询,请查看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多