【发布时间】:2010-06-14 22:22:05
【问题描述】:
十年来,我一直在使用 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
谢谢大家! -瑞奇
【问题讨论】:
标签: sql sql-server database-partitioning