十年的大部分时间里,我一直在使用 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 个月,我给了 Alice 相同的 25%,但 Barbara 得到了 50%,而 Claire 得到了 25%。
我想知道的是我曾经给出的所有不同的分布。在这种情况下,将有两个——一个用于第 1 个月和第 3 个月,一个用于第 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
谢谢大家!-瑞奇