SQL Server:基于排名和值的选择

问题描述:

我发现很难在SQL服务器中创建规则引擎,其输出基于2个输入。SQL Server:基于排名和值的选择

  1. 活动
  2. 点我可以赚取每个活动的排名

表中包含多少分的个人所获得的每一项活动,以及潜在的点,他仍然可以赚取。

每个人都需要赚取一定数量的积分 - 对于所示的例子,个人需要赚取积分才有​​资格。

最终输出必须输出3推荐活动虽然我总在它必须在3个活动分后的3个输出必须考虑到

  1. 排名最高的活动
  2. 点潜力
  3. 多于或大于以符合资格。

我希望这是有道理的,希望能在这里得到帮助。

问候

附加图像是该数据集为只是1职员的一个例子,该数据集包含多个工作人员与每个活动获得的不同点。

Points Example

+0

期望的结果是什么?我并不完全遵循商业逻辑。 – Simon

+0

引用该示例。 总分= 80 要完成1项活动,需要80分以上的积分。 期望的输出必须提供他需要完成的3项活动中的哪一项才能补充80分的建议。 积分潜在领域将表明他可以从中获得这些奖励,但是,我只希望根据排名最高的活动输出其中的3个,并确保3个活动会给他80分或更多的资格。 在此示例中,输出如下: 活动1,2和4 90分 查询需要是动态的。 –

这不是完全清楚你在做什么之后,但我要猜你想要的3个活动以最低的队伍(不重复),将获得总获得的积分+潜能点160以上。否则,你不清楚你是如何得到你要求的积分。在这种情况下,您可以尝试如下所示:

SELECT StaffNumber, Activity1, Activity2, Activity3 
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY a1.Rank, a2.Rank, a3.Rank) RowNum, 
    a.StaffNumber, 
    a1.Activity Activity1, 
    a2.Activity Activity2, 
    a3.Activity Activity3 
    FROM (
    SELECT StaffNumber, SUM(PointsEarned) PointsEarnedTotal 
    FROM activities 
    GROUP BY StaffNumber 
) a 
    INNER JOIN activities a1 
    ON a.StaffNumber = a1.StaffNumber 
    INNER JOIN activities a2 
    ON a.StaffNumber = a2.StaffNumber 
    AND a1.Activity <> a2.Activity 
    INNER JOIN activities a3 
    ON a.StaffNumber = a3.StaffNumber 
    AND a1.Activity <> a3.Activity 
    AND a2.Activity <> a3.Activity 
    WHERE a.PointsEarnedTotal + a1.PointsPotential + a2.PointsPotential + a3.PointsPotential >= 160 
) a 
where RowNum = 1 
+0

谢谢你,这完美解决。非常感谢:) –

+0

@Nitesh_R在这种情况下,你会如此友善,接受我的答案? :) 谢谢。 –