我有一个表"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)