Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql access 2007使用子查询添加列_Sql_Ms Access_Ms Access 2007 - Fatal编程技术网

Sql access 2007使用子查询添加列

Sql access 2007使用子查询添加列,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我正在尝试将新表中的两列添加到当前查询结果中。大概是这样的: 在SQL中,我将执行以下操作: 选择A.Clm1、A.Clm2、B.Clm3,从新表NT中选择udf_编号 其中NT.udf_type_id=1和NT.id=A.id作为NewColumn1,选择 新表NT中的udf_编号,其中NT.udf_type_id=2,NT.id=A.id为 新专栏2 从A.id=B.id内部联接表NT上的表A内部联接表B 在NT.id=A.id上 或者甚至使用case之类的 选择A.Clm1、A.Clm2

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

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

选择A.Clm1、A.Clm2、B.Clm3,从新表NT中选择udf_编号 其中NT.udf_type_id=1和NT.id=A.id作为NewColumn1,选择 新表NT中的udf_编号,其中NT.udf_type_id=2,NT.id=A.id为 新专栏2 从A.id=B.id内部联接表NT上的表A内部联接表B 在NT.id=A.id上

或者甚至使用case之类的

选择A.Clm1、A.Clm2、B.Clm3 ,当NT.udf_type_id=1时为case,则NT.udf_编号为NewColumn1,case 当NT.udf_type_id=2时,则NT.udf_编号为NewColumn2 From

我在access中尝试了一些方法,在from或where部分使用子查询。但没有取得任何成功。我的prb是,我正在尝试根据新表中的1列添加两列。在Access中完成此操作有什么帮助吗?

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

在Access查询设计器中,只需添加两次表。Access可能会将其称为newTable和newTable1,您可能希望将其更改为更具描述性的内容。然后将NT1.udf_type_id和NT2.udf_type_id添加到列列表中,并分别添加筛选值1和2


注意:这将只返回newTable中同时存在类型1和类型2记录的记录。如果要返回所有的,请使用左联接而不是内部联接,并将类型条件添加到联接条件。

我想这对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 对于其他RDBMs或更新的access版本,它可以是:

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

谢谢我理解sql版本。但是在Access中,如何根据udf类型id返回/添加udf类型id。您的方法会让我将udf类型id添加为列。@camelbrush:您将两个udf类型id都添加到过滤器中-如果不想在输出中显示它们,请删除复选框。还要将udf_编号和添加到列列表中,并为它们指定有意义的名称。@camelbrush:噢,顺便说一下:如果您对SQL的使用比Access设计器更为熟悉,可以使用左上角的工具栏按钮将设计器切换到SQL视图。我确实切换了视图,只是由于某些原因,当我将sql代码粘贴到access中时,它无法工作!我想它没有使用t-sql。我将尝试你的上述方法,并回来后,如果它为我工作。谢谢。为什么我们要使用NT1.udf_type_id=A.id-A.id+1?至少access 97拒绝在等号两边都缺少表的查询。如果access 2007也是如此,我不知道。那是我经常使用的伎俩。在这种情况下,或者在正常的sintax中,第二个查询的目的是过滤所需常量上的联接。