2017-10-07 9 views
0

私の出力が2つの入力に基づいているSQLサーバーにルールエンジンを作成することは困難です。SQLサーバー:ランクと値に基づく選択

  1. 活動
  2. ポイントIが活動ごとに稼ぐことができるのランキング
  3. 表は、個人がそれぞれの活動だけでなく、潜在的なポイント、彼のために獲得しているどのように多くのポイントが含まれ

まだ獲得することができます。

各個人は、所定のポイント数を獲得する必要があります - 上記の例では、個人はポイントを獲得する必要があります。

最終出力を出力しなければならない3は、ものの3つの出力を考慮に私はそれをしなければならない3つの活動のポイントを合計した後、最高

  • ポイント潜在的活性をランク付けし

    1. を取らなければならない活動を推奨資格を得るには以上である必要があります。

    私はこれが意味をなさないことを願っています。

    よろしく

    添付画像がちょうど1職員のデータセットの例であり、データセットは、活動ごとに獲得し、異なる点を持つ複数の職員が含ま。

    Points Example

  • +0

    どのような結果が得られますか?私はビジネスロジックに従っていません。 – Simon

    +0

    例を参照してください。 獲得ポイント合計= 80 資格を得るには、1回のアクティビティを完了することで80ポイントを追加する必要があります。 追加の80ポイントを補完するためには、3つのアクティビティのうちどれを完了する必要があるかについての出力が必要です。 ポイントの潜在的なフィールドは、彼がこれを得ることができるものを示しますが、最高ランクの活動に基づいて3つだけを出力し、3つのアクティビティが80ポイント以上の資格を得ることを保証します。次のようにこの例で は、出力は次のようになります 活動1,2&4 90点 クエリは動的である必要があります。 –

    答えて

    0

    それはあなたが後にしているものを完全には明らかではないのですが、私はあなたが可能な限り低いランク(繰り返しなし)で3つの活動をしたいことを推測するつもりだ合計が稼いれますポイントが+潜在的なポイントそれ以外の場合は、あなたの必要なポイントをどのように取得しているのかは不明です。この場合、次のようなことを試すことができます。

    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その場合、あなたは私の答えを受け入れるように親切になるか? :) ありがとうございました。 –