這是修改了我的前面的問題的版本:TSQL equally divide resultset to groups and update themTSQL - 分排分組基於一個場
我有我有2個表,像這樣的數據庫:
Orders表數據像下面:
OrderID OperatorID GroupID OrderDesc Status Cash ...
--------------------------------------------------------------------------
1 1 1 small_order 1 300
2 1 1 another_order 1 0
3 1 2 xxxxxxxxxxx 2 1000
5 2 2 yyyyyyyyyyy 2 150
9 5 1 xxxxxxxxxxx 1 50
10 NULL 2 xxxxxxxxxxx 1 150
11 NULL 3 xxxxxxxxxxx 1 -50
12 4 1 xxxxxxxxxxx 1 200
運營商表:
OperatorID Name GroupID Active
---------------------------------------
1 John 1 1
2 Kate 1 1
4 Jack 2 1
5 Will 1 0
6 Sam 3 0
我能以平分我的記錄裏使用以下查詢同樣組:
SELECT o.*, op.operatorName AS NewOperator, op.operatorID AS NewOperatorId
FROM (SELECT o.*, (ROW_NUMBER() over (ORDER BY newid()) % numoperators) + 1 AS randseqnum
FROM Orders o CROSS JOIN
(SELECT COUNT(*) AS numoperators FROM operators WHERE operators.active=1) op
WHERE o.status in (1,3)
) o JOIN
(SELECT op.*, ROW_NUMBER() over (ORDER BY newid()) AS seqnum
FROM Operators op WHERE op.active=1
) op
ON o.randseqnum = op.seqnum ORDER BY o.orderID
演示,請訪問:http://sqlfiddle.com/#!3/ff47b/1
使用腳本從上面我可以把訂單到(幾乎)相等的團體,而是基於對話務員號碼或訂單,但我需要對其進行修改,以便根據訂單將運營商分配給訂單或訂單號爲Cash
。
例如:
如果我有6個訂單與Cash
值:300,0,50,150,-50,200它們總和給出650
我的腳本應分配給3個算隨機2個訂單訂單的隨機總數爲Cash
。
我想得到的是將例如300,-50分配給operator1,200,0分配給第二個,將150,50分配給第三個。
希望這聲音清晰:)
下面是示例輸出,我希望得到:
ORDERID OPERATORID GROUPID DESCRIPTION STATUS CASH NEWOPERATORID
------------------------------------------------------------------------
1 1 1 small_order 1 300 2
2 1 1 another_order 1 0 1
9 5 1 xxxxxxxxxxx 1 50 4
10 (null) 2 xxxxxxxxxxx 1 150 4
11 (null) 3 xxxxxxxxxxx 1 -50 2
12 4 1 xxxxxxxxxxx 1 200 1
哪有我(如果我可以的話)運營商分配給我的命令,使之和或Cash
將會接近平均水平
頂部的表格數據與底部的示例數據不匹配,它們都不匹配SQL小提琴中的數據。請讓你的例子簡單一致,並提供所需的輸出。 – RedFilter
@RedFilter - 對不起,我已經解決了我的問題,並更新了鏈接到sqlfiddle,所以你可以從我的問題中刪除-1? – Misiu
@Misiu,你說:「我的腳本將分配給3個操作員隨機2訂單與隨機總額的訂單現金」,但後來在您的問題的底部,你說:「我怎麼能(如果我可以)分配操作員到我的訂單的總和還是現金最接近平均水平?「 - 我認爲這些矛盾互相矛盾,但我相信你所問的是兩者的結合,即「我如何根據現金價值將訂單分配給新運營商,以便每個運營商的SUM(CASH)儘可能接近所有運營商的平均CASH?每個運營商都可以訂購。」 –