【问题标题】:access 2007 add column using sub query使用子查询访问 2007 添加列
【发布时间】:2013-04-18 17:18:09
【问题描述】:

我正在尝试将新表中的两列添加到我当前的查询结果中。像这样的东西:

在 SQL 中,我会执行以下操作:

选择 A.Clm1
,A.Clm2
,B.Clm3
,(从 newTable NT 中选择 udf_number 其中 NT.udf_type_id=1 和 NT.id=A.id) 作为 NewColumn1
,(选择 udf_number 来自 newTable NT,其中 NT.udf_type_id=2 和 NT.id=A.id)为 新列2
from TableA A inner join TableB B on A.id=B.id inner join newTable NT NT.id=A.id

甚至使用类似的情况

选择 A.Clm1
,A.Clm2
,B.Clm3
,(当 NT.udf_type_id=1 然后 NT.udf_number 时的情况) 作为 NewColumn1
,(情况 当 NT.udf_type_id=2 然后 NT.udf_number) 作为 NewColumn2
From..... ...

我在访问中尝试了一些事情,在 from 或 where 部分使用子查询。但没有取得任何成功。我的问题是我正在尝试根据新表中的 1 列添加两列。在 Access 中完成这项工作有什么帮助吗?

【问题讨论】:

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


    【解决方案1】:

    这对access97及以上有效(我猜)

    Select A.Clm1, A.Clm2, B.Clm3,
    NT1.udf_number as NewColumn1,
    NT2.udf_number as NewColumn2
    from 
    TableA A 
    inner join TableB B     on A.id=B.id 
    left  join newTable NT1 on NT1.id=A.id and NT1.udf_type_id = A.id - A.id + 1
    left  join newTable NT2 on NT2.id=A.id and NT2.udf_type_id = A.id - A.id + 2
    

    请注意 Access 所需的棘手部分A.id - A.id + 1
    对于其他 RDBM(或者可能是更新的访问版本),它可以是:

    Select A.Clm1, A.Clm2, B.Clm3,
    NT1.udf_number as NewColumn1,
    NT2.udf_number as NewColumn2
    from 
    TableA A 
    inner join TableB B     on A.id=B.id 
    left  join newTable NT1 on NT1.id=A.id and NT1.udf_type_id = 1
    left  join newTable NT2 on NT2.id=A.id and NT2.udf_type_id = 2
    

    【讨论】:

    • 我们为什么要做NT1.udf_type_id = A.id - A.id + 1
    • 至少 access 97 会拒绝在等号两边都有缺失表的查询。如果这对于 2007 年的访问也是如此,我不知道。这是我经常使用的一个技巧。在这种情况下或在普通的 sintax(第二个查询)中,目的是过滤所需常量的连接。
    【解决方案2】:

    加入newTable两次

    在 SQL 中,它看起来像这样:

    SELECT A.Clm1, ...
           NT1.udf_number AS NewColumn1, NT2.udf_number AS NewColumn2
      FROM A 
           INNER JOIN newTable NT1 ON A.id = NT1.id
           INNER JOIN newTable NT2 ON A.id = NT2.id
     WHERE NT1.udf_type_id = 1
       AND NT2.udf_type_id = 2
       AND ...
    

    所以,基本上,你假装有两个不同的newTables:一个只有类型 1 条目,另一个只有类型 2 条目。然后你将两者都加入A

    在 Access 查询设计器中,只需将表添加两次。 Access 可能会称它们为newTablenewTable1,您可能希望将其更改为更具描述性的名称。然后将NT1.udf_type_idNT2.udf_type_id 添加到列列表中,并添加过滤器值(分别为1 和2)。

    (注意:这将只返回来自A 的记录,其中newTable 中的类型1 和类型2 记录都存在。如果要返回所有A,请使用LEFT JOIN 而不是INNER JOIN 将类型标准添加到连接条件。)

    【讨论】:

    • 谢谢。我了解sql版本。但是在 Access 中,如何根据 udf_type_id 返回/添加 udf_number。您的方法将使我将 udf_type_id 添加为列。
    • @camelbrush:您将两个udf_type_ids 添加到过滤器中——如果您不想在输出中显示它们,请删除该复选框。 另外udf_numbers 和 都添加到列列表中,并给它们起有意义的名称。
    • @camelbrush:哦,顺便说一句:如果您使用 SQL 比使用 Access 设计器更舒服,您可以使用左上角的工具栏按钮将设计器切换到 SQL 视图.
    • 我确实切换了视图,只是由于某种原因,当我将 sql 代码粘贴到 access 时,它不起作用!我猜它不使用t-sql。我将尝试您的上述方法,如果它对我有用,我会回来发帖。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多