私は 10 年近く SQL Server を使用してきましたが、このグループ化 (またはパーティション分割、またはランキング...答えが何であるかわかりません!) に困惑しています。それも簡単なものであるべきだと感じます。私の問題を一般化します:
従業員が 3 人いるとしましょう (彼らが辞めるかどうか心配する必要はありません... 常に 3 人います)。
Month Employee PercentOfTotal
--------------------------------
1 Alice 25%
1 Barbara 65%
1 Claire 10%
2 Alice 25%
2 Barbara 50%
2 Claire 25%
3 Alice 25%
3 Barbara 65%
3 Claire 10%
ご覧のとおり、私は 1 か月目と 3 か月目に同じ割合を支払いましたが、2 か月目はアリスに同じ 25% を与えましたが、バーバラは 50%、クレアは 25% を受け取りました。
私が知りたいのは、私がこれまでに与えたすべての異なるディストリビューションです。この場合、1 か月目と 3 か月目に 1 つ、2 か月目に 1 つ、合計 2 つになります。
結果は次のようになると思います (注: ID やシーケンサーなどは関係ありません)。
ID Employee PercentOfTotal
--------------------------------
X Alice 25%
X Barbara 65%
X Claire 10%
Y Alice 25%
Y Barbara 50%
Y Claire 25%
簡単そうですよね?私は困惑しています!誰でもエレガントなソリューションを持っていますか? この質問を書いているときにこのソリューションをまとめただけですが、うまくいくようですが、もっと良い方法があるかどうか疑問に思っています。あるいは、私が何かを学ぶ別の方法かもしれません。
WITH temp_ids (Month)
AS
(
SELECT DISTINCT MIN(Month)
FROM employees_paid
GROUP BY PercentOfTotal
)
SELECT EMP.Month, EMP.Employee, EMP.PercentOfTotal
FROM employees_paid EMP
JOIN temp_ids IDS ON EMP.Month = IDS.Month
GROUP BY EMP.Month, EMP.Employee, EMP.PercentOfTotal
ありがとうございます!-リッキー