【发布时间】:2012-03-19 06:38:12
【问题描述】:
我有一个表格“tbl”,看起来像这样:
prod | cust | qty
p1 | c1 | 5
p1 | c2 | 10
p2 | c1 | 2
p3 | c2 | 8
我需要的是一份不同的产品和客户对列表,但如果产品出售给多个客户,则只需要第一个客户。换句话说,结果需要如下所示:
prod | cust
p1 | c1
p2 | c1
p3 | c2
我已经尝试了所有我能想到的方法,但我不能完全得到正确的结果。显然 distinct 和 group by 都不起作用(单独),因为它们都会返回 p1, c2 行。
我发现这个question 非常接近,但我不知道如何重新编写它来让它做我需要的事情。
最重要的是,这一切目前需要在 Access 2007 或更高版本中运行,但在未来某个时候,它也需要在 MySQL 中运行。
对将结果加入客户表的任何人都给予额外的奖励,以便我可以从客户代码中查找人类可读的名称,例如c1 => Fred Bloggs 扳手
【问题讨论】:
-
如何定义“第一客户”?是否有一个日期字段可以明确说明您没有显示?
-
我将“first”定义为查询返回的任何一个 - 我很乐意返回 p1,c1 或 p1,c2 我只是无法同时返回两者(因为产品代码正在另一个连接中使用,我不希望重复)。表 tbl 中没有其他有用的字段。
-
好的,我在发布答案后阅读了这条评论——这没有意义——你想要“第一个”客户,但你实际上并不关心“第一个”客户实际上是谁是或如何确定的?我不是在写你的要求,但你真的想要随着时间的推移基本上随机的结果?!?
-
好吧,我应该说任意单个客户。我完全意识到客户会随着时间的推移而改变,我不喜欢它,但我必须忍受它。基本上,我使用此查询中的产品密钥加入的另一个表不包含任何客户信息。行仅由产品密钥标识,我必须报告的所有客户的总数。客户希望看到客户和产品的突破,但这是不可能的 - 他们没有数据 - 所以我们被要求只报告任何针对产品的有效客户。