选择第一个匹配的行

wob*_*ogs 14 sql ms-access

我有一个表"tbl",看起来像这样:

prod | cust | qty
p1   | c1   | 5
p1   | c2   | 10
p2   | c1   | 2
p3   | c2   | 8
Run Code Online (Sandbox Code Playgroud)

我需要的是一个明确的产品和客户对列表,但只有第一个客户,如果产品销售给多个客户.换句话说,结果需要如下所示:

prod | cust
p1   | c1   
p2   | c1   
p3   | c2   
Run Code Online (Sandbox Code Playgroud)

我已经尝试了每一种我能想到的方式,但我无法得到正确的结果.很明显,既不是不同的也不是group by(因为它们都将返回p1,c2行).

我发现这个问题是一个非常接近的匹配,但我无法弄清楚如何重新编写它以使它做我需要的.

最重要的是,目前所有这些都需要在Access 2007或更高版本中运行,但在将来的某个时候它也需要在MySQL中运行.

对于也将结果加入到客户表中的任何人来说,这是额外的功劳,这样我就可以从客户代码中查找人类可读的名称,例如c1 => Fred Bloggs Spanners

J C*_*per 17

核心问题:

SELECT prod, MIN(cust)
FROM yourTable
GROUP BY prod
Run Code Online (Sandbox Code Playgroud)

对于"奖金":

SELECT T.prod,
       T.cust,
       YC.SomeCustomerAttribute1,
       YC.SomeCustomerAttribute2
FROM (
      SELECT prod, MIN(cust) AS first_cust
      FROM yourProducts
      GROUP BY prod
) AS T
JOIN yourCustomers AS YC ON YC.cust = T.first_cust
Run Code Online (Sandbox Code Playgroud)