2010-03-19 5 views
6

J'ai une table Customers et j'aimerais assigner un Salesperson à chaque client de façon circulaire.Affectation round-robin

Customers 
--CustomerID 
--FName 
--SalespersonID 

Salesperson 
--SalespersonID 
--FName 

Donc, si j'ai 15 clients et 5 vendeurs, je voudrais que le résultat final pour ressembler à quelque chose comme ceci:

CustomerID -- FName -- SalespersonID 
1 -- A -- 1 
2 -- B -- 2 
3 -- C -- 3 
4 -- D -- 4 
5 -- E -- 5 
6 -- F -- 1 
7 -- G -- 2 
8 -- H -- 3 
9 -- I -- 4 
10 -- J -- 5 
11 -- K -- 1 
12 -- L -- 2 
13 -- M -- 3 
14 -- N -- 4 
15 -- 0 -- 5 

etc ...

Je joue autour avec ceci pour un peu et j'essaye d'écrire du SQL pour mettre à jour ma table de clients avec le SalespersonID approprié, mais ai du mal à le faire fonctionner.

Toutes les idées sont grandement appréciées!

Répondre

6

En SQL Server:

WITH с AS 
     (
     SELECT *, ROW_NUMBER() OVER ORDER BY (customerID) AS rn 
     FROM customers 
     ), 
     s AS 
     SELECT *, 
       ROW_NUMBER() OVER ORDER BY (SalespersonID) AS rn 
     FROM salesPersons 
     ) 
SELECT c.*, s.* 
FROM с 
JOIN s 
ON  s.rn = 
     (с.rn - 1) % 
     (
     SELECT COUNT(*) 
     FROM salesPersons 
     ) + 1 
+0

est là une faute de frappe (customerID au lieu de SalesID)? ----------------------> SELECT *, ROW_NUMBER() SUR COMMANDE PAR (customerID) AS rn FROM salesPersons – nee21

+0

@ nee21: c'est, merci – Quassnoi

1

Une plate-forme particulière? Dans SQL Server 2005 et versions ultérieures, vous pouvez utiliser ROW_NUMBER (OVER) pour attribuer des numéros de ligne, puis utiliser votre ROW_NUMBER du nombre de clients pour moduler le nombre de commerciaux ROW_NUMBER.