SQL Server:基于Rank和Value的选择

时间:2017-10-07 20:46:45

标签: sql sql-server

我发现很难在SQL server中创建一个规则引擎,我的输出基于2个输入。

  1. 活动排名
  2. 我可以为每项活动赚取的积分
  3. 该表格列出了每个活动获得的积分以及他仍然可以赚取的潜在积分。

    每个人都需要获得一定数量的积分 - 例如,个人需要获得 80 积分才能获得资格。

    最终输出必须输出3个推荐活动虽然必须考虑3个输出

    1. 排名最高的活动
    2. 指出潜力
    3. 在我总计3项活动的积分后,必须大于或大于 80 才能获得资格。
    4. 我希望这是有道理的,我将在此感谢您的帮助。

      问候

      附加图像是仅1名工作人员的数据集示例,该数据集包含多个工作人员,每个活动获得不同的分数。

      Points Example

1 个答案:

答案 0 :(得分:0)

我不完全清楚你之后会发生什么,但我猜你想要的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