用于分配满足给定条件的管理器的SQL查询

时间:2015-03-30 15:33:42

标签: mysql sql

我有一份卖家名单,我必须为他们分配经理。数据格式如下

Seller  category    Division    Sales 
David     17          A          5000
David     23          B          2000
David     91          C          100
David     25          C          200
Jack      23          A          4000
Jack      17          A          4000
Jack      25          B          3000

现在提供经理列表如下:

Manager preferred_category  Designation
Tom           17               H
Aman          17               L
Sandy         23               H
John          23               L
Robin         91               H
Adam          91               L
Clara         25               H
Ted           25               L

现在遵循的规则如下:

  1. 卖方A和B部门类别将分配给该类别的设计'H'经理,C类别将从销售额最高的A,B类经理处获得相同的类别
    1. 如果所有分部都是C,那么卖家将只获得1名经理,卖家销售额最高的类别的L设计
  2. 我已经成功地在VBA中解决了这个问题,但是它太麻烦了,我想在sql中实现自动化。我只需找到某种启动或启动过程的方式,我将能够采取这种方式。任何帮助将不胜感激。

    先谢谢

1 个答案:

答案 0 :(得分:0)

这是一个粗略的方法。不保证可以处理任何特定的SQL风格,但我假设您有Access或SQL Server。

  1. 创建两个表,SELLER和MANAGER并插入数据
  2. 在SELLER表上,添加一个名为“seller_id”的自动编号列,以及一个名为“manager_id”的新整数列(尚无数据)
  3. 在MANAGER表上
  4. ,添加名为“manager_id”的自动编号列
  5. 执行一些SQL来填充SELLER.manager_id列:
  6. 规则1的类似内容:

    update seller set manager_id = 
       (select manager_id from MANAGER m 
        inner join SELLER s on s.category = m.preferred_category
        where s.division in ('A','B') and m.designation = 'H' 
        and rownum < 2)
    

    对于规则2:

    update seller set manager_id = 
       (select manager_id from MANAGER m 
        inner join SELLER s on s.category = m.preferred_category
        where s.division = 'C' and m.designation = 'L' 
        and rownum < 2)
    

    如果您需要为卖家分配更多经理,则需要创建交叉引用表并移动ID列