我需要一些帮助的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;