SQL Server:基于排名和值的选择
问题描述:
我发现很难在SQL服务器中创建规则引擎,其输出基于2个输入。SQL Server:基于排名和值的选择
- 活动
- 点我可以赚取每个活动的排名
表中包含多少分的个人所获得的每一项活动,以及潜在的点,他仍然可以赚取。
每个人都需要赚取一定数量的积分 - 对于所示的例子,个人需要赚取积分才有资格。
最终输出必须输出3推荐活动虽然我总在它必须在3个活动分后的3个输出必须考虑到
- 排名最高的活动
- 点潜力
- 多于或大于以符合资格。
我希望这是有道理的,希望能在这里得到帮助。
问候
附加图像是该数据集为只是1职员的一个例子,该数据集包含多个工作人员与每个活动获得的不同点。
答
这不是完全清楚你在做什么之后,但我要猜你想要的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在这种情况下,你会如此友善,接受我的答案? :) 谢谢。 –
期望的结果是什么?我并不完全遵循商业逻辑。 – Simon
引用该示例。 总分= 80 要完成1项活动,需要80分以上的积分。 期望的输出必须提供他需要完成的3项活动中的哪一项才能补充80分的建议。 积分潜在领域将表明他可以从中获得这些奖励,但是,我只希望根据排名最高的活动输出其中的3个,并确保3个活动会给他80分或更多的资格。 在此示例中,输出如下: 活动1,2和4 90分 查询需要是动态的。 –