2012-04-17 107 views
2

我遇到了我需要做的加入的问题 - 问题出在这里: 我有一个17个销售人员的数据库,每个销售人员都有自己的总计,例如费用,预付款和佣金。 在我的数据库中,大约有200位顾客可以拥有多达3名销售员。这是少数,但确实存在。每位销售人员都在该帐户的发票上付款。我的一些销售人员都只是2号销售人员上的帐户,这意味着他们永远第一,所以如果我不加入一个营业员的发票 - 他没有任何发票,因为他从来都不是业务员1 我可以拉作为推销员2发票时,我只是在看发票,但每8周我需要加入他的销售人员1的费用,以他的销售员2发票。我无法得到它的工作或想出一个解决方案。 我有一个销售人员查询,以便每8个星期,我可以叫业务员数100,看他的费用 我有发票/付款查询,看看他有什么付款 - 但我在那里我想带来的推销员第三查询加上他的付款不起作用,因为他是第一个开支销售员和发票/付款中的第二个推销员 我已经尝试了SQL中的每一种方式,似乎无法做到正确。如何编写联接查询?

有没有一种方法,我可以加入由业务员查询salesman1对slmn1或slmn2或slmn3发票/付款查询?

这个例子太复杂:

FROM qryFinalWeek 
INNER JOIN QryFW ON qryFinalWeek.SLMN = QryFW.SLMN2 OR QryFW.SLMN3 OR QryFW.Salesrep1 
WHERE (((QryFW.PDATE)=[FDATE]+4)); 

这个例子仅仅是给的发票,他的第一个销售员,所以我不能得到任何佣金,如果他是第二个:

WHERE (((qryFinalWeek.SLMN)=[Forms]![frFWDATE]![Text0]) AND ((QryFW.PDATE)=[FDATE]+4)) OR (((QryFW.SLMN2)=[Forms]![frFWDATE]![Text0]) AND ((QryFW.PDATE)=[FDATE]+4)) OR (((QryFW.SLMN3)=[Forms]![frFWDATE]![Text0]) AND ((QryFW.PDATE)=[FDATE]+4)) 

任何反馈感谢!

回答

2

的数据结构所产生的问题为您服务。我的建议是从客户表中删除销售人员(假设每个客户的数据不仅仅是关联的销售人员),并将其添加到名为Salesmen_Customers或类似的新表中。此表将包含对销售人员和客户之间的许多关系的许多

这是当前的结构

old data structure

这里是新的结构

new data structure

这应该简化查询结构显着。如果您的销售人员的深度更深,这也可以轻松扩展。如果您有兴趣进一步阅读关于数据库设计的主题,我会推荐SQL anti patterns。如果你真的嫁给了你的DB结构,你可以查询你的出路,但我不会推荐它。