使用子查询访问 2007 添加列
Posted
技术标签:
【中文标题】使用子查询访问 2007 添加列【英文标题】:access 2007 add column using sub query 【发布时间】: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 中完成这项工作有什么帮助吗?
【问题讨论】:
【参考方案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 ...
所以,基本上,你假装有两个不同的newTable
s:一个只有类型 1 条目,另一个只有类型 2 条目。然后你将两者都加入A
。
在 Access 查询设计器中,只需将表添加两次。 Access 可能会称它们为newTable
和newTable1
,您可能希望将其更改为更具描述性的名称。然后将NT1.udf_type_id
和NT2.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_id
s 添加到过滤器中——如果您不想在输出中显示它们,请删除该复选框。 另外将udf_number
s 和 都添加到列列表中,并给它们起有意义的名称。
@camelbrush:哦,顺便说一句:如果您使用 SQL 比使用 Access 设计器更舒服,您可以使用左上角的工具栏按钮将设计器切换到 SQL 视图.
我确实切换了视图,只是由于某种原因,当我将 sql 代码粘贴到 access 时,它不起作用!我猜它不使用t-sql。我将尝试您的上述方法,如果它对我有用,我会回来发帖。谢谢。以上是关于使用子查询访问 2007 添加列的主要内容,如果未能解决你的问题,请参考以下文章