访问查询设计 - 复杂条件?

Access Query Design - Complex Criteria?

我正在尝试找出创建查询的最佳方法。

假设我有两个 tables

在查询中,我希望 [Carrier] 值为 'IRT'。当 [Co State] = [Lic State] 时,我希望显示 [Line],但在 SC 和 TN 有两个不同的行条目的情况下,我只需要显示 'M' 值。

示例结果如下:

table数据只是一个假样本。真实数据包括所有 50 个州,一些 [Lic State] 有一个值,少数有两个。

是否有一种简单的方法可以通过一个查询创建这些结果,或者最好创建一个省略 'SC' 和 'TN' 的 [Lic State] 的查询,以及一个仅包括 'SC' 和 'TN' 具有 'M' 的 [Line],然后获取两个查询的 SQL 并通过 UNION?

加入它们

我在手机上,只是为了好玩,是的......它不干净,但想法就在那里。

您需要使用分组方式,因为每个州只需要一条记录。

Select first (carrier), first (Costate), iif(count (line)>1,"M", first (line)) from (select costate from t2 where licstate="irt") left join t1 on Costate=licstate 按海岸分组

您需要使用聚合函数。您可以通过 IIF 聚合。因此,如果您按 CoState 分组并为每个带有 M 的记录计数 1,则可以在聚合值上使用 IIF 并在需要时返回 M,否则返回第一个值(因为就您的问题而言,只有一个值):

SELECT Tabelle2.Carrier, Tabelle2.CoState, IIf(Max(IIf([Tabelle1].[Line]="M",1,0))=1,"M",First([Tabelle1].[Line])) AS Line
FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.LicState = Tabelle2.CoState
GROUP BY Tabelle2.Carrier, Tabelle2.CoState
HAVING (((Tabelle2.Carrier)="IRT"));

所以它的三个步骤:内部 IIF 为每个带有 M 的记录集返回 1。聚合将其转换为 1,对于应该返回 M 的记录,对于其他记录为 0 - 最后是外部IIF 处理聚合函数并返回 M 或线值。由于您正在分组,因此您还需要聚合该值 - 您可以使用 FIRST 指令执行此操作。