0

概括:

我有一个我试图分配给工作人员列表的工作项列表。每个工作最多只能分配 100 个工作项。每个工作项都指定了应该使用它的用户(关联为所有者)。

例如:

Jim 共有 5 个帐户,每个帐户具有多个工作项。吉姆总共有 50 项工作已经分配给他。我只能再分配 50 个。

我的困境/目标:

我正在使用一个临时表和一个 select 语句来获取每个所有者当前分配给他们的项目的数量,我计算新项目的可用插槽并将值存储在新列中。我需要能够从所有者与我的所有者列表及其可用项目(在临时表中)匹配的项目表中进行选择,仅检索每个用户的行数等于每个用户的可用插槽数 - 查询将只返回 50 行给 jim,即使可能有 200 行符合条件,而 sam 可能会得到 0 行,因为他没有可用的插槽,而在 items 表中有 30 个项目可供他使用。

我意识到我可能错误地处理了这个问题。我想避免使用游标。

编辑:添加一些示例代码

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 的输出值(在 Jim 的场景中)

4

1 回答 1

1

它花费的时间比我想要的要长,但我找到了解决方案。

我确实使用了上面建议的子查询来生成具有用户唯一行数的工作项。

我使用 PARTITION BY 为每个工作人员生成唯一的行数,并在我的 HAVING 子句中包含行号必须小于可用插槽的计数。我会发布代码,但它超出了 char 限制,而且我还有很多东西要正确地更改为 anon 系统。

最初,我错误地解决了这个问题,专注于限制结果,而不是考虑创建必要的数据来关联结果集。

于 2013-03-22T20:58:27.327 回答