【问题标题】:MS Access SQL SELECT TOP QUERYMS Access SQL 选择顶部查询
【发布时间】:2023-04-07 13:14:02
【问题描述】:

我需要一些关于 SELECT TOP 查询的帮助,以及用 VBA 编写代码还是继续使用 SQL 是否更容易。

我有一个表 (StockSheet),它有 17 列和 +500 多条记录,查询的唯一相关字段是 Pallet 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 确定 Inv 代码有 X 条记录并显示每个查询的正确记录数?

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

问候, 布伦登

【问题讨论】:

    标签: sql ms-access top-n


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我摆弄了你的代码,我喜欢它返回行号的方式。我正在尝试将以下 WHERE 子句添加到代码中,但它没有返回我想要的结果:WHERE StockSheet.[Inv Code]="AG"。你有什么建议我可以把上面的代码放在哪里?
    • 你到底在哪里添加 WHERE 子句?
    • 我会说你必须为两个内部选择添加它,所以行编号只为“AG”完成。
    • 非常感谢,它运行良好。感谢您的帮助。在测试的时候,我没有在两个内部选择中添加 WHERE 子句。
    猜你喜欢
    • 2015-01-08
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多