首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access查询,如果一列中存在两个值,则忽略一个

Access查询,如果一列中存在两个值,则忽略一个
EN

Stack Overflow用户
提问于 2017-03-08 23:33:20
回答 1查看 60关注 0票数 1

我有一系列查询生成包含化学数据的报告。有两种化合物A和B,其中A是总量,B是特定的量(例如,总铁和亚铁)。

查询结果中大约有100个化合物,我需要一个条件来过滤结果,以便如果化合物A和B都存在,则只显示化合物B。到目前为止,我已经尝试将一些iif语句添加到查询构建器的criteria部分,但没有成功。

这是我到目前为止所知道的:

代码语言:javascript
复制
SELECT Table1.KEY_ANLT
FROM Table1
WHERE (((Table1.KEY_ANLT)=IIf([Table1].[KEY_ANLT]=1223 And [Table1].[KEY_ANLT]=70,70,1223)));

这会过滤掉化合物A,但不包括其余的化合物。如何修改查询以包括其他化合物?

EN

回答 1

Stack Overflow用户

发布于 2017-03-30 09:29:53

因此,为了澄清上面的一些注释,这里的问题是您没有(或没有在上面指定)一种方法来标识组合在一起的值。您给出了70和1223作为示例,但是如果您给我们一个包含所有数字的列表,我们如何能够确定哪些数字组合在一起?你可能会说“化学专业知识”,但这是基于另一个含有化合物名称的专栏,对吧?因此,实际上,您的查询应该使用该列。但是仍然存在如何连接相关名称的问题(例如,“全铁”和“亚铁”可能会连接在一起,因为它们都有“铁”这个词,但是“高锰酸盐”和“锰”呢?)。简而言之,您需要另一个列来指定这些单独行之间的共同之处,无论是元素、离子、电荷等。您还需要一个列来标识您希望在查询中包括每个“组”中的哪一行(或排除哪些行)。例如:

代码语言:javascript
复制
+----------+-----------------+---------+---------+
| KEY_ANLT |    Compound     | Element | Primary |
+----------+-----------------+---------+---------+
|       70 | total iron      | Fe      | Y       |
|     1223 | ferrous iron    | Fe      |         |
|     1224 | ferric iron     | Fe      |         |
|      900 | total manganese | Mn      | Y       |
|      901 | permanganate    | Mn      |         |
+----------+-----------------+---------+---------+

然后,要获得一个只显示“主要”行的查询,这是非常简单的:

代码语言:javascript
复制
SELECT * FROM Table1 WHERE Primary='Y';

如果没有主列,您必须决定如何选择每一行。也许你会想要KEY_ANLT最小的那个?

代码语言:javascript
复制
SELECT Table1.*
FROM
    (SELECT Element, min(KEY_ANLT) AS MinKey FROM Table1 GROUP BY Element) AS Subquery
    INNER JOIN Table1 ON 
        Subquery.Element=Table1.Element AND
        Subquery.MinKey=Table1.KEY_ANLT

查询不起作用的原因是WHERE子句是逐行操作的,并且不会将不同的行相互比较。所以在你的SQL中:

代码语言:javascript
复制
IIf([Table1].[KEY_ANLT]=1223 And [Table1].[KEY_ANLT]=70,70,1223)

所有行都不会将其计算为70,因为没有一行具有KEY_ANLT=1223和KEY_ANLT=70。每行只有一个KEY_ANLT值。因此,对于每一行,IIF表达式的计算结果为1223,您的条件将只返回KEY_ANLT=1223 (复合B)的行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42675484

复制
相关文章

相似问题

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