使用子查询访问2007添加列

时间:2013-04-18 17:18:09

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

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

在SQL中我会做类似的事情:

  

选择A.Clm1
,A.Clm2
,B.Clm3
,(从newTable NT中选择udf_number)   其中NT.udf_type_id = 1和NT.id = A.id)为NewColumn1
,(选择   来自newTable NT的udf_number,其中NT.udf_type_id = 2,NT.id = A.id)as   NewColumn2   
来自TableA A.id = B.id内连接newTable NT的内连接TableB B.   在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或where部分中的子查询进行访问。但没有取得任何成功。我的prb是我试图在新表中添加两列基于1列。在Access中完成任务有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

加入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:一个只有1个条目,另一个只有2个条目。你加入A

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

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

答案 1 :(得分:0)

这适用于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