それはあなたが後にしているものを完全には明らかではないのですが、私はあなたが可能な限り低いランク(繰り返しなし)で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
どのような結果が得られますか?私はビジネスロジックに従っていません。 – Simon
例を参照してください。 獲得ポイント合計= 80 資格を得るには、1回のアクティビティを完了することで80ポイントを追加する必要があります。 追加の80ポイントを補完するためには、3つのアクティビティのうちどれを完了する必要があるかについての出力が必要です。 ポイントの潜在的なフィールドは、彼がこれを得ることができるものを示しますが、最高ランクの活動に基づいて3つだけを出力し、3つのアクティビティが80ポイント以上の資格を得ることを保証します。次のようにこの例で は、出力は次のようになります 活動1,2&4 90点 クエリは動的である必要があります。 –