我有一个Access查询,该查询应该为一组项目提取一个月内购买的数量。我的联接设置为选择Analysis中的所有项目以及与分析匹配的产品中的项目。
SELECT AnalysisItems.Pmid, AnalysisItems.ProductName, Sum(Transactions.TransactionQty)
AS SumOfTransactionQty, Transactions.StoreAccount
FROM AnalysisItems INNER JOIN Transactions ON AnalysisItems.Pmid = Transactions.Pmid
WHERE (((Transactions.TransactionDate) Between #4/1/2011# And #4/30/2011#)
AND StoreAccount = 964290)
GROUP BY AnalysisItems.Pmid, AnalysisItems.ProductName, Transactions.StoreAccount
ORDER BY AnalysisItems.ProductName;
我希望看到所有78个分析项目,无论它们是否具有数量值。这仅返回具有数量的项目。它也不返回负值或0到1之间的值......即使我知道那里有一些小数值,它也不会显示0.50。一切都设置为标准十进制,比例2
我已尝试更改为一般数字并完全摆脱格式,但这也无效。
所以我的问题是..我可以尝试在查询中查看小数值,如何查看所有项目?
答案 0 :(得分:1)
您的部分查询为:
FROM AnalysisItems INNER JOIN Transactions ON AnalysisItems.Pmid = Transactions.Pmid
WHERE (((Transactions.TransactionDate) Between #4/1/2011# And #4/30/2011#)
您指定的内部联接不会提供您要求的结果 - 理想情况下,您希望将左联接用于您的目的。取代
FROM AnalysisItems INNER JOIN Transactions
与
FROM AnalysisItems LEFT JOIN Transactions
我认为应该可以正常使用
答案 1 :(得分:0)
“我想查看所有78个分析项目,无论它们是否具有数量值。”
如果这意味着您希望结果集中包含AnalysisItems行,即使这些项在4月和StoreAccount 964290的事务中没有任何匹配项,当您将这些条件放在WHERE子句中时也不会包括它们...您将只获得与WHERE子句条件匹配的行。
我认为您需要为事务使用子查询并将WHERE子句移动到子查询中。 LEFT JOIN AnalysisItems到子查询。
SELECT
a.Pmid,
a.ProductName,
Sum(t.TransactionQty) AS SumOfTransactionQty,
t.StoreAccount
FROM
AnalysisItems AS a
LEFT JOIN [
SELECT
Pmid,
TransactionQty,
StoreAccount
FROM Transactions
WHERE
(TransactionDate Between #4/1/2011# And #4/30/2011#)
AND StoreAccount = 964290
]. AS t
ON a.Pmid = t.Pmid
GROUP BY
a.Pmid,
a.ProductName,
t.StoreAccount
ORDER BY
a.ProductName;