Sql 计数选择和局部变量存储

Sql 计数选择和局部变量存储,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我需要找到与他们关联的客户数量最少的人的id,以便将当前新客户分配给该工作人员 我已使用以下方法建立该员工的id,如下所示: SELECT TOP(1) JA.judgeID, COUNT(JA.judgeId) AS COUNT FROM recJudgeAssignment AS JA LEFT JOIN recEntrantStatus AS ES ON JA.bandId = ES.entrantId GROUP BY JA.judgeId, ES

我需要找到与他们关联的客户数量最少的人的id,以便将当前新客户分配给该工作人员

我已使用以下方法建立该员工的id,如下所示:

    SELECT TOP(1) JA.judgeID, COUNT(JA.judgeId) AS COUNT
    FROM recJudgeAssignment AS JA
    LEFT JOIN recEntrantStatus AS ES
    ON JA.bandId = ES.entrantId
    GROUP BY JA.judgeId, ES.roundId
    HAVING ES.roundId = @round
    ORDER BY COUNT
但我需要将其作为局部变量捕获,以便在下一个语句中使用

    UPDATE recJudgeAssignment
    SET judgeId = @judge
    WHERE roundId = @round
    AND bandId = @entrantId
我如何在第一个选择中捕捉判断ID?通常我会做这样的事情

    SELECT @judge =(SELECT TOP(1) JA.judgeID, COUNT(JA.judgeId) AS COUNT
    FROM recJudgeAssignment AS JA
    LEFT JOIN recEntrantStatus AS ES
    ON JA.bandId = ES.entrantId
    GROUP BY JA.judgeId, ES.roundId
    HAVING ES.roundId = @round
    ORDER BY COUNT)
当然,这不起作用,因为select正在返回判断ID和计数。我希望不必将第一次选择的结果发送回网页,然后在单独的web>db事务中执行后续更新语句

所以。。。任何人能提供的任何帮助或补救措施都将不胜感激


提前谢谢

只需查看第一个查询
SELECT top(1) @judge = JA.judgeID, @count_j =COUNT(JA.judgeId)
    FROM recJudgeAssignment AS JA
    LEFT JOIN recEntrantStatus AS ES
    ON JA.bandId = ES.entrantId
    GROUP BY JA.judgeId, ES.roundId
    HAVING ES.roundId = @round
    ORDER BY COUNT
请试试这个

SELECT TOP(1) JA.judgeID
FROM recJudgeAssignment AS JA
LEFT JOIN recEntrantStatus AS ES
 ON   JA.bandId = ES.entrantId 
 AND  ES.roundId = @round   
GROUP BY JA.judgeId, ES.roundId
ORDER BY COUNT(JA.judgeId)

我手头没有MSSQL服务器可供测试,但您能否将聚合函数
COUNT(JA.judgeId)
放在您的
orderby
子句中(而不是包含在您的
SELECT
中)?我现在就试试,但听起来很有可能。@Crontab否。这不起作用。它只返回-1代码,没有结果/记录。你确定我只是按顺序测试了一个计数吗?检查拥有-如果它不是一个集合,为什么拥有?从docMVtext group by sID order by COUNT(sID)中选择前1个sID。这会导致列名“COUNT”无效。有什么建议吗?谢谢。@PhillHealey-应该是按计数排序的(JA.judgeeid)@Martin Smith-我也这么认为。只是想确定一下。谢谢您的确认。;-)这看起来是可行的,但我将使用上面@Dems的答案,因为它也给了我输出结果的可能性。谢谢你的回复。非常感谢。谢谢,很抱歉给你添麻烦。在编辑时,我错误地删除了顶部(1)。
SELECT TOP(1) JA.judgeID
FROM recJudgeAssignment AS JA
LEFT JOIN recEntrantStatus AS ES
 ON   JA.bandId = ES.entrantId 
 AND  ES.roundId = @round   
GROUP BY JA.judgeId, ES.roundId
ORDER BY COUNT(JA.judgeId)