2017-10-07 27 views
0

我發現很難在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分 查詢需要是動態的。 –

回答

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 
+0

謝謝你,這完美解決。非常感謝:) –

+0

@Nitesh_R在這種情況下,你會如此友善,接受我的答案? :) 謝謝。 –