如何在Access SQL中只符合每个符合条件的行?

如何在Access SQL中只符合每个符合条件的行?

问题描述:

我有数据,看起来像这样如何在Access SQL中只符合每个符合条件的行?

CUSTID  POLICY  TYPE RANDOMTHING ETC 

而且有时会出现每CUSTID乘行,与否则其余字段不同的值。我只想每个CUSTID返回一行,只取第一行的值(忽略其余行)。

我试过先申请CUSTID,但它似乎没有工作。

+0

您是否尝试过使用“TOP 1”谓词作为查询的一部分? (我假设你正在编写一个SQL语句)。 –

+0

我该如何做一个“TOP 1”?是的,我可以编辑SQL语句 –

+0

谷歌搜索它,我不认为这是我所需要的。它只返回我的数据集的最上面一行。我需要每个CUSTID的“顶级”行(实际上,我的CUSTID就像第二个域) –

我相信你想要的东西,像

SELECT t1.* 
FROM yourTable t1 INNER JOIN 
    (
     SELECT CUSTID, MIN(POLICY) AS MinOfPOLICY 
     FROM yourTable 
     GROUP BY CUSTID 
    ) t2 ON t1.CUSTID = t2.CUSTID AND t1.POLICY = t2.MinOfPOLICY 
ORDER BY 1 

在这个例子中,t1t2是表别名。在大多数情况下,当构建一个不止一次引用同一个表的查询时,需要使用表别名来消除列引用的歧义。例如,您不能只说0123',因为您不清楚yourTable的第一个实例是CUSTID,还是来自第二个实例。

SQL语言允许通过将别名直接放在表名后面给别名表,所以yourTable t1表示“yourTable,使用别名t1”。另一个别名t2GROUP BY子查询(括号内的那个)的别名。

+1

看起来像一个很好的猜测给我。 :-)如果这不是他所追求的,他应该向我们展示样本数据和他希望从样本中得到的输出。 – HansUp

+0

@HansUp [TYPE]是隐式排序的唯一可能的候选人。排序RANDOMTHING看起来不会是最好的选择.... :) –

+0

我不明白这里的t1和t2是什么?或者如何解析“yourTable t1”。假设我的查询名称是MyQuery –