我一直在使用SQL Server十年来的更好的一部分,这个分组(或分区,或排名...我不知道答案是什么! )有一个让我难住。感觉它也应该是一件容易的事。我会概括我的问题: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 %。
我想知道的是我所给出的所有不同的分布。在这种情况下,会出现两个 - 第一个月和第三个,第二个一个。
我期望结果看起来像这样(注意: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
谢谢你们啦! -Ricky
嘿谢谢 - 优雅,在一般意义上的作品,和很好的解释。对于我来说,性能并不是那么重要,因为它是一次性数据转换脚本,而不是生产级代码。 – user366729 2010-06-15 15:14:00