MS Access-Return Record低于当前记录

时间:2016-10-12 16:24:19

标签: sql database ms-access ms-access-2013

我是Access的新手,我想做的事情看起来应该很简单,但我似乎无法得到它。

我是一名贸易结构工程师,正在建立一个设计建筑物的数据库。

我的隔膜分析表包括字段" Floor_Name"," Story_Number"," Wall_Left"和" Wall_Right"。我想编写一个新查询,查看另一个名为" Shear_Wall_incremental_Deflection"并根据隔膜分析的输入从中提取信息。我想在" Wall_Right"中取得价值。 (SW01),在" Shear_Wall_incremental_Deflection"中找到相应的值,并报告" Elastic_Deflection"对应于" Story_Below"而不是" Story_Number"在隔膜分析表中。在" Story_Number" = 1," Story_Below"将为0,我希望输出为0.

" Wall_Left"的相同程序,但我只是一步一步。

似乎我需要使用" DLookup"在具有TWO标准的表达式构建器中,一个是Wall_Right = Shear_Wall,另一个是Story_Number = Story_Below,但是当我尝试这个时,我只是得到错误。

" Shear_Wall_incremental_Deflection"包括所有三个故事的剪力墙,即它从SW01开始并通过SWW获取故事编号3,然后再次在SW01开始故事编号2,依此类推,直到故事编号1.我只显示部分查询结果图片,但请放心,有" Elastic_Deflection"故事编号低于3的值。

这是我在Expression Builder中的尝试:

Right_Defl_in:IIf(IsNull([Diaphragm_Analysis]![Wall_Right]),0,DLookUp(" [Elastic_Deflection_in]"," [Shear_Wall_incremental_Deflection]"," [Shear_Wall_incremental_Deflection]![Story_Below] ="& [Diaphragm_Analysis]![Story_Number]))

我知道我从Diaphragm_Analysis" Wall_Left"和" Wall_Right"必须包括来自Diaphragm_Analysis的所有记录,并且只包括来自" Shear_Wall_incremental_Deflection"![Shear_Walls]的那些记录,其中连接的字段是相同的,但这是关于我所知道的。

如果我需要提供更多信息或发送数据库文件,请告诉我。

感谢您的帮助。

Diaphragm Analysis (Input Table)

Shear_Wall_incremental_Deflection (Partial Image of Query)

1 个答案:

答案 0 :(得分:0)

我认为您缺少的是,您可以并且应该加入Diaphragm_Analysis两次,第一次获取Story_Below值,第二次使用它来获取相应的Elastic_Deflection

要处理Story_Below为零的特殊情况,我会使用OR编写一个单独的查询(这次只需要一次加入)和“UNION一起”两个查询设置操作(请注意以下SQL未经测试):

SELECT swid.Floor_Name,
       swid.Story_Number,
       swid.Wall_Left, 
       da2.Elastic_Deflection AS Story_Below_Elastic_Deflection
  FROM ( Shear_Wall_incremental_Deflection swid
         INNER JOIN Diaphragm_Analysis da1
            ON da1.ShearWall = swid.Wall_Left )
         INNER JOIN Diaphragm_Analysis da2
            ON da2.ShearWall = swid.Wall_Left
               AND da2.Story_Number = da1.Story_Below
UNION
SELECT swid.Floor_Name,
       swid.Story_Number,
       swid.Wall_Left, 
       0 AS Story_Below_Elastic_Deflection
  FROM Shear_Wall_incremental_Deflection swid
       INNER JOIN Diaphragm_Analysis da1
          ON da1.ShearWall = swid.Wall_Left
 WHERE da1.Story_Below = 0;

我认为没有Story_Number为零的数据。