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;
我需要一些关于 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;