0

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

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

Select A.Clm1
,A.Clm2
,B.Clm3
,(select udf_number from newTable NT where NT.udf_type_id=1 and NT.id=A.id) as NewColumn1
,(select udf_number from newTable NT where NT.udf_type_id=2 and NT.id=A.id) as NewColumn2
from TableA A inner join TableB B on A.id=B.id inner join newTable NT on 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 中完成这项工作有什么帮助吗?

4

2 回答 2

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的 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并将类型标准添加到连接健康)状况。)

于 2013-04-18T19:25:13.497 回答
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

请注意A.id - A.id + 1Access 所需的棘手部分
对于其他 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
于 2013-04-18T19:30:56.590 回答