我正在尝试将新表中的两列添加到当前查询结果中。像这样的东西:
在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中完成任务有什么帮助吗?
答案 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查询设计器中,只需添加两次表。访问权限可能会调用newTable
和newTable1
,您可能希望将其更改为更具描述性的内容。然后将NT1.udf_type_id
和NT2.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