我是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]的那些记录,其中连接的字段是相同的,但这是关于我所知道的。
如果我需要提供更多信息或发送数据库文件,请告诉我。
感谢您的帮助。
答案 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
为零的数据。