我有兩個表,我希望表 B 將隨機分配給特定列的表 A 值。
表一:
SubscriptionID | Number | SubStart | SubEnd | MobPhoneID
1 321 2013-01 NULL NULL
2 123 2013-02 2014-02 NULL
3 321 2013-03 NULL NULL
4 444 2013-04 2013-04 NULL
5 555 2013-05 NULL NULL
表 B:
MobPhoneID | Manufacturer
1 Samsung
2 LG
3 Apple
4 Sony
我的目標是:
SubscriptionID | Number | SubStart | SubEnd | MobPhoneID
1 321 2013-01 NULL 3
2 123 2013-02 2014-02 NULL
3 321 2013-03 NULL 2
4 444 2013-04 2013-04 NULL
5 555 2013-05 NULL 4
我擁有的當前代碼:
UPDATE TableA
SET MobPhoneID= t2.MobPhoneID
FROM TableA t1
CROSS APPLY (
SELECT TOP 1 MobPhoneID
FROM TableB
WHERE t1.SubEnd IS NULL
ORDER BY newid()
) t2
目標是將隨機電話提供給訂閱未結束的人。
上面的 SQL 查詢產生以下輸出:
SubscriptionID | Number | SubStart | SubEnd | MobPhoneID
1 321 2013-01 NULL 2
2 123 2013-02 2014-02 NULL
3 321 2013-03 NULL 2
4 444 2013-04 2013-04 NULL
5 555 2013-05 NULL 2
它不添加隨機值,它只選擇一個隨機值并應用于所有這些值。
我的愿望是讓每個人都能隨機獲得一個電話。
我希望我的問題是有道理的,我似乎無法弄清楚我做錯了什么。
uj5u.com熱心網友回復:
t1.SubEnd 為 Null 導致它每次都選擇相同的前 1 - 如果您將其設定為等于自身,則它會重新評估它。
UPDATE TableA
SET MobPhoneID= t2.MobPhoneID
FROM TableA t1
CROSS APPLY (
SELECT TOP 1 MobPhoneID
FROM TableB
WHERE t1.SubEnd = t1.SubEnd
ORDER BY newid()
) t2
我以前使用過這種方法并得到了預期的結果。
uj5u.com熱心網友回復:
一部手機是否只能分配一次?然后通過隨機 row_number 進行分配可以做到。
;with A as ( select *, row_number() over (order by SubStart) rn from TableA where subend is null ) , B as ( select *, row_number() over (order by newid()) rn from TableB ) update A set MobPhoneID = B.MobPhoneID from B where B.rn = A.rn
select a.*, b.Manufacturer from TableA a left join TableB b on b.MobPhoneID = a.MobPhoneID order by SubscriptionID訂閱 ID | 數量 | 子開始 | 副結束 | 手機號碼 | 制造商 -------------: | -----: | :------- | :------ | ---------: | :----------- 1 | 第321話 2013-01 | 空 | 3 | 蘋果 2 | 123 | 2013-02 | 2014-02 | 空| 空 3 | 第321話 2013-03 | 空 | 1 | 三星 4 | 第444話 2013-04 | 2013-04 | 空| 空 5 | 第555話 2013-05 | 空 | 2 | LG
關于db<>fiddle 的演示在這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/386717.html
上一篇:BLAST資料庫錯誤:未找到蛋白質資料庫的別名或索引檔案[/mnt/research/common-data/Bio/blastdb/nr]
