【问题标题】:What is wrong with my query on Access 2010?我对 Access 2010 的查询有什么问题?
【发布时间】:2013-05-04 07:28:09
【问题描述】:

我在 Access 2010 (accdb) 上有这个查询,它运行得非常好:

SELECT b.category_name, a.item_name,  
(SELECT COUNT(*) FROM tbl_stock_receiving AS x WHERE x.safe_stock_id = a.ID) AS received,   
(SELECT COUNT(*) FROM tbl_stock_issuance AS y WHERE y.stock_receiving_id = a.ID) AS issued,
(received-issued) AS on_hand, a.safe_stock  
FROM tbl_safe_stock AS a INNER JOIN tbl_category AS b
ON a.category_id = b.id
ORDER BY a.item_name;

现在,我需要修改它以包含一个简单的 WHERE 语句

...
ON a.category_id = b.id
WHERE a.safe_stock > on_hand
ORDER BY a.item_name;
...

当我运行查询时,Access 不断弹出

的参数值

on_hand

on_hand 是您在

上看到的别名
(received-issued) AS on_hand

我的查询可能有什么问题?

【问题讨论】:

    标签: ms-access


    【解决方案1】:

    您已将on_hand 定义为输出 列的名称,但SQL 解析器不够聪明,无法返回您的查询并“逆向工程”到on_hand 所在的位置从。因此,您需要使用 WHERE a.safe_stock > (received - issued) 之类的东西,但它们也是输出列的别名。

    所以尝试将整个事情包装成一个子查询,然后应用 WHEREORDER BY 子句:

    SELECT * FROM
    (
        SELECT b.category_name, a.item_name,  
        (SELECT COUNT(*) FROM tbl_stock_receiving AS x WHERE x.safe_stock_id = a.ID) AS received,   
        (SELECT COUNT(*) FROM tbl_stock_issuance AS y WHERE y.stock_receiving_id = a.ID) AS issued,
        (received-issued) AS on_hand, a.safe_stock  
        FROM tbl_safe_stock AS a INNER JOIN tbl_category AS b
        ON a.category_id = b.id
    )
    WHERE safe_stock > on_hand
    ORDER BY item_name
    

    编辑

    上面的建议导致了“查询太复杂”的错误,所以我的下一个建议是将原始查询保存为 [StockCheckBaseQuery] 然后做

    SELECT * FROM StockCheckBaseQuery WHERE safe_stock > on_hand ORDER BY item_name
    

    这似乎是成功的。

    【讨论】:

    • 好的,我已将 'on_hand' 替换为 '(received -issued)' 现在它要求为 'received' 和可能的 'issued' 提供参数值。如何使这些字段完全合格?
    • @Ruben 抱歉,我应该注意到 receivedissued 也是输出别名。我已经更新了我的答案。请让我知道这是否有效。
    • 感谢您的帮助,运行查询时,它显示“查询太复杂。”。有什么想法吗?
    • @Ruben 嗯,好的,尝试将您的原始查询保存为 [StockCheckBaseQuery],然后执行 SELECT * FROM StockCheckBaseQuery WHERE safe_stock > on_hand ORDER BY item_name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2010-12-23
    • 2010-11-26
    • 2017-02-25
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多