访问查询设计 - 复杂标准?

时间:2016-11-16 22:14:06

标签: ms-access union criteria

我试图找出创建查询的最佳方式。

我们说我有两张桌子

enter image description here

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

示例结果如下: enter image description here

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

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

2 个答案:

答案 0 :(得分:0)

我在移动设备上,为了好玩而这样做,是的......这个想法并不干净。

您需要使用group by,因为每个州只需要一条记录。

选择第一个(承运人),第一个(成本),iif(计数(行)> 1,“M”,第一个(行)) from(从t2中选择costate,其中licstate =“irt”)在Costate = licstate上离开join t1 按费用分组

答案 1 :(得分:0)

您需要使用聚合函数。你可以聚合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或Line-Value。由于您正在进行分组,因此您还需要聚合该值 - 您使用FIRST指令进行聚合。