繁体   English   中英

SQL LEFT JOIN with WHERE 子句语法错误(MS Access)

[英]SQL LEFT JOIN with WHERE Clause Syntax Error (MS Access)

我有一张数据表,显示 8 年期间各种产品型号的销售额( tblSales )每条销售记录都列出了交易信息,包括产品、交易时间戳和基于时间戳的名为 year_month 的列。

我需要创建一个查询,返回数据集中每个 year_month 产品 model 的销售计数(总共 102 个月)。 问题是某些型号在给定月份没有购买,因此我需要查询以返回该月份的 0。

目前我可以通过创建第二个表和两个单独的查询来实现这一点。

我用原始表( tblSales tblYrMo ,然后产品 A 的月份计数为qry1 (这排除了没有 productA 销售的月份)。 接下来, qry2tblYrMoqry1的左连接,使用 NZ() function 在没有产品销售的月份产生 0。 这为我提供了所有 102 个月的 productA 计数结果。

对多个产品使用这种方法会创建数十个查询,因此我尝试简化代码并使用子查询仅创建一个查询。 但是,我收到语法错误(“连接操作中的语法错误”)。 我想知道这里是否有人可以提供帮助,或者这在 MS Access SQL 中是否可行

这是我写的代码没有运行。 该错误突出显示了FROM tblSales的子查询,因此我尝试将其放入 [],并且尝试将所有表格/列放入 [],但没有运气。

SELECT tblYrMo.year_month
FROM tblYrMo
LEFT JOIN 
    (SELECT Count(NZ([tblSales].[year_month],0)) as Monthly_Count
     FROM  tblSales
     WHERE (tblSales.[product_model] Like "A"))
ON tblYrMo.year_month = tblSales.year_month;

作为参考,这里是我正在使用的两个查询,它们目前可以完成工作

qry1

SELECT tblSales.year_month, Count(tblSales.year_month) AS Monthly_Count
FROM tblSales
WHERE (((tblSale.[product_model]) Like "A"))
GROUP BY tblSales.year_month;

qry2

SELECT tblYrMo.year_month, Nz([qry1].[Monthly_Count],0) AS Monthly_Sale_Count
FROM tblYrMo 
LEFT JOIN qry1
ON tblYrMo.year_month = qry1.year_month;

您需要一个表别名:

SELECT tblYrMo.year_month
FROM tblYrMo LEFT JOIN 
     (SELECT Count(NZ([tblSales].[year_month],0)) as Monthly_Count
      FROM  tblSales
      WHERE tblSales.[product_model] Like "A"
     ) as s
     ON tblYrMo.year_month = s.year_month;

我认为主要问题是查询没有返回你想要的,我认为你很接近:

SELECT tblYrMo.year_month, Nz([qry1].[Monthly_Count],0) AS Monthly_Sale_Count
FROM tblYrMo 
LEFT JOIN (
   SELECT tblSales.year_month, Count(tblSales.year_month) AS Monthly_Count
   FROM tblSales
   WHERE (((tblSale.[product_model]) Like "A"))
   GROUP BY tblSales.year_month
) as qry1
ON tblYrMo.year_month = qry1.year_month;

我认为这是您正在寻找的那种合并查询。 我还可以添加销售产品 model 的分组,并将该字段包含在您的结果中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM