MS Access SQL SELECT TOP QUERY



我需要一些帮助的SELECT TOP查询,是否会更容易在VBA中编写代码或继续使用SQL。

我有一个表(StockSheet),它有17列和超过500条记录,查询的唯一相关字段是托盘Id和Inv Code。

我还创建了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可以确定有X多个Inv代码记录,并显示每个查询记录的正确数量?

请告诉我是否应该使用VBA而不是SQL来解决这个问题,或者如果有人需要更多的信息/屏幕截图或更好的解释。

问候,布兰登

只是一个想法,但也许您可以尝试生成行号,然后根据行号进行选择: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;

最新更新