【问题标题】:Access UNION and JOIN query访问 UNION 和 JOIN 查询
【发布时间】:2015-07-27 11:14:03
【问题描述】:

情况:我正在处理的 Access 数据库将部分分为左右部分。同一部分可用于两面。我正在尝试创建一个查询来计算每周所需的单个零件的总数。

问题:如何创建一个允许 UNION 多个字段和 JOIN 的查询,如下所示?

Table 1:
Part # |Left Part | Left Part Qty | Right Part | Right Part Quantity
1        xyz         5               lmn          7
2        abc         8               xyz          4

Table 2:
Part # | Needed
1        10
2        25

Query:
Part | Quantity
xyz    150 (5 * 10) + (4 * 25) 
abc    200 (8 * 25) 
lmn    70 (7 * 10)

【问题讨论】:

    标签: sql ms-access ms-access-2007


    【解决方案1】:

    您在 MS Access 中遇到问题,因为您不能将 union/union all 放入子查询中。如果你有一个零件表(你应该有),那么你可以使用left join,所以我认为以下内容可以满足你的需求:

    select p.partname,
           sum(nz(t1l.leftpartqty * t2.needed) + nz(t1r.rightpartqty * t2.needed))
    from ((part as p inner join
           table2 as t2
           on p.part# - t2.part# 
          ) left join
          table1 as t1l
          on t1l.leftpart = p.partname 
         ) left join
         table1 as t1r
         on t1r.rightpart = p.partname
    group by p.partname;
    

    如果您没有这样的表,您可以使用视图执行union all 并从那里继续。

    【讨论】:

    • 您确定union 不能用作子查询吗?
    • 请看我的回答。可以使用union 作为子查询。
    • @MaciejLos 。 . .当我用谷歌搜索“MS Access union subquery”时,我在许多网站上收到了很多问题,错误是不允许这样做。当我查看有关select (msdn.microsoft.com/en-us/library/bb208930(v=office.12).aspx) 语法的文档时,union 没有作为select 语句的一部分(它是一个单独的运算符)。而且,子查询的定义只允许select。
    • 我使用的是 MS Access 2010 (MS Office 2010 Pro),我没有遇到任何错误;) 谢谢您的澄清。
    【解决方案2】:

    这应该也可以:

    SELECT T.Part, SUM(T.Qty * S.Needed) AS Quantity
    FROM (
    SELECT A.[Part#] AS PartNo, A.LeftPart As Part, A.LeftPartQty As Qty
    FROM Table1 AS A
    UNION ALL
    SELECT B.[Part#] AS PartNo, B.RightPart As Part, B.RightPartQty As Qty
    FROM Table1 AS B
    ) AS T INNER JOIN Table2 AS S ON T.PartNo = S.[Part#]
    GROUP BY T.Part
    ORDER BY T.Part
    

    结果:

    Part    Quantity
    abx     200
    lmn     70
    xyz     150
    

    欲了解更多信息,请参阅:
    UNION (MS Access)
    Subqueries (MS Access)
    INNER JOIN Operations (MS Access)
    LEFT JOIN, RIGHT JOIN Operations (MS Access)

    【讨论】:

      猜你喜欢
      • 2018-01-30
      • 2018-09-21
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2012-01-23
      相关资源
      最近更新 更多