概要:
ワーカーのリストに割り当てようとしている作業項目のリストがあります。各作業には、最大100個の作業項目のみを割り当てることができます。各作業項目は、それを作業する必要がある(所有者として関連付けられている)ユーザーを指定します。
例えば:
ジムは、それぞれが複数の作業項目を持つ合計5つのアカウントで作業します。合計で、ジムにはすでに50のアイテムが割り当てられています。あと50個しか割り当てられません。
私の窮状/目標:
一時テーブルとselectステートメントを使用して、各所有者が現在割り当てているアイテムの数を取得し、新しいアイテムに使用可能なスロットを計算して、値を新しい列に格納しています。所有者が所有者のリストと(一時テーブル内の)利用可能なアイテムと一致するアイテムテーブルから選択できる必要があります。各ユーザーの行数は、ユーザーごとの利用可能なスロットの数に等しいだけです-クエリ基準に一致する200が存在する場合でも、jimには50行しか返されませんが、samは、アイテムテーブルで作業するアイテムが30あるのに、使用可能なスロットがないために0行を取得する場合があります。
私はこの問題に間違って取り組んでいる可能性があることを認識しています。カーソルの使用は避けたい。
編集:いくつかのサンプルコードを追加する
SELECT
nUserID_Owner
, CASE
WHEN COUNT(c.nWorkID) >= 100 THEN 0
ELSE 100 - COUNT(c.nWorkID)
END
,COUNT(c.nWorkID)
FROM tblAccounts cic
LEFT JOIN tblWorkItems c
ON c.sAccountNumber = cic.sAccountNumber
AND c.nUserID_WorkAssignedTo = cic.nUserID_Owner
AND c.nTeamID_WorkAssignedTo = cic.nTeamID_Owner
WHERE cic.nUserID_Collector IS NOT NULL
AND nUserID_CurrentOwner = 5288
AND c.bCompleted = 0
GROUP BY nUserID_Owner
これにより、5288、50、50の出力値が提供されます(ジムのシナリオで)