首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从第二个表访问sql显示值

从第二个表访问sql显示值
EN

Stack Overflow用户
提问于 2015-01-01 16:14:27
回答 3查看 109关注 0票数 0

我仍在积极学习MS /sql(需要符合Office 2003 )。我已经尽我所能把事情简化了。

我有下表(Main),包括两个字段(Ax和Ay),它扩展到数千条记录。这是主数据库,需要搜索:

表:主表

代码语言:javascript
代码运行次数:0
运行
复制
Ax  Ay
1   6
5   9
3   3
    7
5   5
7   2
2   
4   4
    3
6   5
7   6

等等..。上面的空白条目只是空值。Ax和Ay值可以出现在这两个字段中。

还有一个名为Afull的表,该表包含两个名为Avalid和Astr的字段:

表: Afull

代码语言:javascript
代码运行次数:0
运行
复制
Avalid  Astr
1
2
3
4
5
6
7
8
9

字段Astr在每次运行开始时初始化为Null。

此表的第一个用途是将Ax和Ay的所有有效值存储在Avalid字段中。第二个用途是允许用户选择搜索标准。为此,在用户搜索表单中将表Afull作为子窗体添加。然后,用户将任何值>0输入到要搜索的值旁边的Astr中,从而选择要搜索的A有效值。

然后构建一个sql查询字符串,其目的是返回包含用户选择的A有效值的任何“置换”的所有记录:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT Main.Ax,Main.Ay
FROM Main
WHERE (Main.Ax In(uservalues) OR Main.Ax Is Null) AND (Main.Ay In(uservalues) OR Main.Ay Is Null)

“uservalue”转换为要搜索的有效值列表。这是很好的,并按预期工作(双空记录不存在)。

问题:I希望在结果中包含Astr值本身-- Astr值的一个字段和Astr值的一个字段。我尝试了一些方法,包括在SELECT语句中添加以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
strSQL = strSQL & ",IIF((Main.Ax In(uservalues)),Afull.Astr AS Axstr"
strSQL = strSQL & ",IIF((Main.Ay In(uservalues)),Afull.Astr AS Aystr"
strSQL = strSQL & "FROM Main,Afull"

...but,这不起作用。是否有相对简单的方法来达到这一点?

最终,我还将使用Astr值对升序进行排序。将Astr视为所选A有效值的“强度”。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-01 19:01:09

换句话来说,用户可以选择Ax & Ay的值,您只想返回Ax和Ay都在所选值列表中的记录,或者其中任何一个值可能为null,但不是两者都是空的。

现在,您要为Ax和Ay添加Astr。您可以使用如下所示的与共同相关的子查询,或者您可以两次连接到Afull,一次在Ax = Avalid上,一次在Ay = Avalid上。

如果要构建类似于示例中的SQL字符串,也要检查方括号。

代码语言:javascript
代码运行次数:0
运行
复制
SELECT 
    Main.Ax,
    Main.Ay,
    (select Astr from Afull where Avalid = Main.Ax) as AxStr,
    (select Astr from Afull where Avalid = Main.Ay) as AyStr
FROM Main
WHERE (Main.Ax In(uservalues) OR Main.Ax Is Null) 
AND (Main.Ay In(uservalues) OR Main.Ay Is Null)
票数 1
EN

Stack Overflow用户

发布于 2015-01-01 23:52:54

不管哪种方法在一天结束时起作用,但这里有一种选择,它基本上为第一个计算为true的表达式选择了值。如果A?Str为null或小于零,则使用零值,以便您只需将这两个结果相加。

代码语言:javascript
代码运行次数:0
运行
复制
Switch(AxStr>=0, AxStr,AxStr<0,0,isnull(AxStr),0) + Switch(AyStr>=0, AyStr,AyStr<0,0,isnull(AyStr),0)
票数 1
EN

Stack Overflow用户

发布于 2015-01-01 21:02:34

谢谢你,GB,非常欣赏和完美的工作。问题中缺少的右括号也是固定的,并且Axstr Aystr ->提高了可读性AxStr AyStr注意到(突出强度方面)。

SELECT语句的扩展以获取AxStr+AyStr的总数,即,AxStr+AyStr as TOTAL只有在各自的Main.Ax和Main.Ay都具有非空值时才能工作。

由于主表中的Null值是可允许的,所以我扩展了SELECT语句以获得AxStr+AyStr的总数,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
strSQL = strSQL & ",IIF(AxStr>0 AND AyStr>0,AxStr+AyStr,IIF(Main.Ax Is Null,AyStr,
                    IIF(Main.Ay Is Null,AxStr,0))) AS AStrTOTAL"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27732416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档