這是一個奇怪的要求,但模運算符(%
)應該幫助您,而不需要函數,序列或更改數據庫結構。這假定這些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」 –
是否可以添加新用戶?如果是這樣,會發生什麼?作業是否應該自動重新平衡,以便所有的顧客再次平等分工,或者現有的作業保持不變? –