sql left join with where子句语法错误(ms access)

bxjv4tth  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(373)

我有一个数据表,显示了8年来各种产品型号的销售情况( tblSales )每个销售记录都列出了交易信息,包括产品、交易时间戳和基于时间戳的名为“年\月”的列。
我需要创建一个查询,返回一个产品模型在数据集中每年/月的销售计数(总共102个月)。问题是有些型号不是在给定的月份购买的,所以我需要查询返回该月份的0。
目前,我可以通过创建第二个表和两个单独的查询来实现这一点。
我创建了一个表( tblYrMo )从原来的表中每年\u个月( tblSales ),那么 qry1 producta的月份计数(去掉没有producta销售的月份)。接下来, qry2 它是 tblYrMoqry1 使用nz()函数在没有产品销售的月份生成0。这给了我所有102个月的产品计数的期望结果。
对多个产品使用此方法会创建几十个查询,因此我尝试简化代码并使用子查询只创建一个查询。但是,我得到了一个语法错误(“连接操作中的语法错误”)。我想知道这里是否有人可以帮忙,或者这在msaccesssql中是否可行
这是我写的代码没有运行。错误突出显示子查询 FROM tblSales ,所以我试着把它放在[]里,我试着把所有的tabel/列放在[]里,运气不好。

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;
kdfy810k

kdfy810k1#

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

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;

我想这就是你要找的那种合并查询。我还可以添加一个销售产品模型的分组,并在结果中包含该字段。

vcirk6k6

vcirk6k62#

需要表别名:

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;

相关问题