場所のリスト内で従業員の一意のランダムな投稿/採用場所を選択しようとしています.すべての従業員はすでにこれらの場所に投稿されています.ランダムな場所は自宅の場所と同じではなく、無作為に選択された指定の従業員は、場所テーブルの場所ごとの指定番号以下でなければなりません」
従業員テーブルは次のとおりです。
EmpNo EmpName CurrentPosting Home Designation RandomPosting
1 Mac Alabama Missouri Manager
2 Peter California Montana Manager
3 Prasad Delaware Nebraska PO
4 Kumar Indiana Nevada PO
5 Roy Iowa New Jersey Clerk
等々...
Places テーブル (従業員数を含む PlaceNames - 賢明な指定) は次のとおりです。
PlaceID PlaceName Manager PO Clerk
1 Alabama 2 0 1
2 Alaska 1 1 1
3 Arizona 1 0 2
4 Arkansas 2 1 1
5 California 1 1 1
6 Colorado 1 1 2
7 Connecticut 0 2 0
等々...
以下のように newid() で試してみると、RandomPosting の地名を持つ従業員を選択できるようになりました。
WITH cteCrossJoin AS (
SELECT e.*, p.PlaceName AS RandomPosting,
ROW_NUMBER() OVER(PARTITION BY e.EmpNo ORDER BY NEWID()) AS RowNum
FROM Employee e
CROSS JOIN Place p
WHERE e.Home <> p.PlaceName
)
SELECT *
FROM cteCrossJoin
WHERE RowNum = 1;
さらに、指定番号 (Places テーブル内) に基づいてランダム選択を制限する必要があります...つまり、各従業員に PlaceName (Places から) をランダムに割り当てます。与えられた数を超えないこと。
前もって感謝します。