Atribuição de robin redondo
-
21-09-2019 - |
Pergunta
Eu tenho uma mesa de clientes e gostaria de atribuir um vendedor a cada cliente de uma maneira redonda.
Customers
--CustomerID
--FName
--SalespersonID
Salesperson
--SalespersonID
--FName
Então, se eu tiver 15 clientes e 5 vendedores, gostaria que o resultado final pareça algo assim:
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 ...
Eu tenho brincado com isso um pouco e estou tentando escrever um SQL para atualizar a mesa dos meus clientes com o vendedor apropriado, mas estou tendo alguns problemas para fazê -lo funcionar.
Quaisquer idéias são muito apreciadas!
Solução
Dentro 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
Outras dicas
Alguma plataforma em particular?
No SQL Server 2005 e UP, você pode usar o Row_Number (over) para atribuir números de linha e, em seguida, usar seu row_number do Modulo do Cliente o número de vendedores para determinar o vendedor row_number.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow