这是一个奇怪的要求,但模运算符(%
)应该帮助您,而不需要函数,序列或更改数据库结构。这假定这些ID是整数。如果他们不是,您可以使用ROW_NUMBER
或其他一些策略来为每个客户获得不同的数字值。
很明显,一旦您对代码感到满意,您将用INSERT
代替SELECT
声明,但在插入前总是选择开发时的好习惯。
样本数据设置:
DECLARE @Users TABLE (ID int, [Name] varchar(50))
DECLARE @Customers TABLE (ID int, [Name] varchar(50))
DECLARE @Assignment TABLE (CustomerID int, UserID int)
INSERT INTO @Customers
VALUES
(1, 'Joe'),
(2, 'Jane'),
(3, 'Jon'),
(4, 'Jake'),
(5, 'Jerry'),
(6, 'Jesus')
INSERT INTO @Users
VALUES
(1, 'Ted'),
(2, 'Ned'),
(3, 'Fred')
QUERY:
SELECT C.Name AS [CustomerName], U.Name AS [UserName]
FROM @Customers C
JOIN @Users U
ON
CASE WHEN C.ID % 3 = 0 THEN 1
WHEN C.ID % 3 = 1 THEN 2
WHEN C.ID % 3 = 2 THEN 3
END = U.ID
你会改变THEN 1
到任何你的第一个用户名是THEN 2
与第二用户名,并THEN 3
与第三用户名。如果你最终与其他用户和要拆分的客户4种方式,你会做有以下替换CASE
声明:
CASE WHEN C.ID % 4 = 0 THEN 1
WHEN C.ID % 4 = 1 THEN 2
WHEN C.ID % 4 = 2 THEN 3
WHEN C.ID % 4 = 3 THEN 4
END = U.ID
OUTPUT:
CustomerName UserName
-------------------------------------------------- --------------------------------------------------
Joe Ned
Jane Fred
Jon Ted
Jake Ned
Jerry Fred
Jesus Ted
(6 row(s) affected)
最后,你将要选择实际插入的ID,但是我选择了名称,以便更容易理解结果。请让我知道这是否需要澄清。
添加一个标识列到自动增量自动分配的分配?即使他们最终没有完全顺序,他们也会被订购。 –
哈哈@AlexK。 “automagically” –
是否可以添加新用户?如果是这样,会发生什么?作业是否应该自动重新平衡,以便所有的顾客再次平等分工,或者现有的作业保持不变? –