MS Access SQL SELECT 热门查询

MS Access SQL SELECT TOP QUERY

我需要一些关于 SELECT TOP 查询的帮助,以及在 VBA 中编写代码或继续使用 SQL.

是否更容易

我有一个 table (StockSheet),它有 17 列和超过 500 条记录,查询的唯一相关字段是托盘 ID 和库存代码。

我还创建了 3 个表单来将查询显示为子表单。

第一个查询(LoadSpec1Qry)如下:

SELECT TOP 20 StockSheet.*
FROM StockSheet
WHERE (((StockSheet.[Inv Code])="AG"))
ORDER BY [Pallet Id];

第二个查询(LoadSpec2Qry):

SELECT TOP 20 *
FROM (SELECT TOP 40 * FROM StockSheet WHERE (((StockSheet.[Inv Code])="AG")) ORDER BY [Pallet Id])  AS t
WHERE (((t.StockSheet.[Inv Code])="AG"))
ORDER BY t.[Pallet Id] DESC;

第三个查询(LoadSpec3Qry):

SELECT TOP 20 *
FROM (SELECT TOP 60 * FROM StockSheet WHERE (((StockSheet.[Inv Code])="AG"))     ORDER BY [Pallet Id] DESC)  AS t
WHERE (((t.StockSheet.[Inv Code])="AG"))
ORDER BY t.[Pallet Id] DESC;

总结一下:在表格 1 中,它将显示前 20 条记录 (LoadSpec1Qry),其中 Inv_Code = "AG",在表格 2 (LoadSpec2Qry) 中,它将显示记录 21-40,在表格 3 中(LoadSpec3Qry) 将显示记录 41-60。

我遇到的问题是:如果有 52 条记录 Inv Code = "AG",LoadSpec3Qry 将显示记录 33-52。我试图获得的结果是让 LoadSpec3Qry 显示记录 41-52。

有没有一种方法 SQL 可以确定 Inv 代码有 X 条记录并在每个查询中显示正确的记录数?

请告知我是否应该使用 VBA 而不是 SQL 来解决这个问题,或者是否有人需要更多 info/screenshots 或更好的解释。

此致, 布伦登

只是一个想法,但也许您可以尝试生成行号,然后根据行号 select:1-20、21-40 和 41-60。那行不通吗!?像这样:

SELECT *
FROM (
    SELECT 
    (
        SELECT COUNT(t1.[Pallet Id]) + 1 
        FROM [StockSheet] t1 
        WHERE t1.[Inv Code]="AG" AND t1.[Pallet Id]<t2.[Pallet Id]
    ) AS RowID,
    t2.*
    FROM [StockSheet] AS t2
    WHERE t2.[Inv Code]="AG"
)
WHERE RowID BETWEEN 1 AND 20;
--WHERE RowID BETWEEN 21 AND 40;
--WHERE RowID BETWEEN 41 AND 60;