【问题标题】:SQL LEFT JOIN with WHERE Clause Syntax Error (MS Access)SQL LEFT JOIN 与 WHERE 子句语法错误(MS 访问)
【发布时间】:2020-10-28 01:09:15
【问题描述】:

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

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

目前,我可以通过创建第二个表和两个单独的查询来完成此操作。

我创建了一个表 (tblYrMo),其中包含原始表 (tblSales) 中的每个 year_months,然后是 productA 的月份计数 qry1(其中排除了没有 productA 销售的月份)。接下来,qry2tblYrMoqry1 的左连接,使用 NZ() 函数在没有产品销售的月份产生 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;

【问题讨论】:

    标签: sql ms-access subquery left-join


    【解决方案1】:

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

    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;
    

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

    【讨论】:

      【解决方案2】:

      你需要一个表别名:

      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;
      

      【讨论】:

      • 一开始我也是这么想的,但是子查询没有一个叫year_month的字段。此外,整体查询不会返回 OP 正在寻找的数据。
      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多