Access中的ROW_NUMBER()

时间:2014-04-24 14:56:27

标签: sql ms-access-2007

我正在尝试计算支出的迭代次数。请参阅下面的示例数据。 这就是我所拥有的:这个人已经分三期支付了(分期付款= 1条记录)。

+-----+----------+--------------+--------------+--------------+------------+--------+
|PytID|  PytGross| PayoutUnits  | SumOfPayouts  |   PaidOut   | PayoutYear | EmpID  |
+-----+----------+--------------+--------------+--------------+------------+--------+
|  1  |  $11,000 |     6.6667   |      3       |      3       |   2008     |  100   |
+-----+----------+--------------+--------------+--------------+------------+--------+
|  1  |  $11,000 |     6.6667   |      3       |      3       |   2009     |  100   |
+-----+----------+--------------+--------------+--------------+------------+--------+
|  1  |  $11,000 |     6.6666   |      3       |      3       |   2010     |  100   |
+-----+----------+--------------+--------------+--------------+------------+--------+

使用SumOfPayouts(他/她应该支付的总次数),我正在尝试找到付款的迭代。每年有1次支付。这是我想要得到的(我没有包括EmpID b / c的间距。)

+-----+----------+--------------+--------------+--------------+------------+----------+
|PytID|  PytGross| PayoutUnits  | SumOfPayouts |   PaidOut    | PayoutYear |Iteration |
+-----+----------+--------------+--------------+--------------+------------+----------+
|  1  |  $11,000 |     6.6667   |      3       |      3       |   2008     |    1     |
+-----+----------+--------------+--------------+--------------+------------+----------+
|  1  |  $11,000 |     6.6667   |      3       |      3       |   2009     |    2     |
+-----+----------+--------------+--------------+--------------+------------+----------+
|  1  |  $11,000 |     6.6666   |      3       |      3       |   2010     |    3     |
+-----+----------+--------------+--------------+--------------+------------+----------+

注意:ID字段特定于每个付款方式。那个,我的意思是=>一个人选择了3次支付,因此对于这个样本数据,员工100已经选择以3年分期的方式接收20个单位。这3条记录有两个共同点:EmployeeIDPytID

似乎我需要使用PayoutYear来保留某种ROW_NUMBER(),但由于我使用的是Access ,因此它不是选项。有没有人知道如何做到这一点?

更多信息:我从查询中提取(SQL非常混乱......)。这就是我从中获取的查询中的数据。

AwardDate   PytGross    PytUnits    Remaining   PaidOut Sum EmployeeID  MCR_PytYear
12/26/2000  $11,500.06    6.67          0           3     3    100200       2008
12/26/2000  $11,500.06    6.67          0           3     3    100200       2009

1 个答案:

答案 0 :(得分:3)

SELECT T1.EmployeeID, T1.PayoutYear, 
   (SELECT COUNT (*) FROM Table1 AS T2 
   WHERE (T1.PayoutYear >T2.PayoutYear OR T1.PayoutYear=T2.PayoutYear) 
   AND T1.EmployeeID=T2.EmployeeID) AS Iteration
FROM Table1 AS T1;

结果:

EmployeeID  PayoutYear     Iteration
 100200       2008             3
 100200       2009             6
 100200       2010             12

这是我的样本表:

EmployeeID  PayoutYear
100         2008
100         2009
100         2010
200         2008
200         2009

和我的查询结果:

EmployeeID  PayoutYear  Iteration
100          2008            1
100          2009            2
100          2010            3
200          2009            1
200          2010            2

你可以进入查询的SQL视图,并向我展示你正在使用的Select语句,也可能是你表的几行?

更新:我们只是错过了一个小细节:

SELECT T1.EmployeeID, T1.PayoutYear, 
   (SELECT COUNT (*) FROM Table1 AS T2 
   WHERE (T1.PayoutYear >T2.PayoutYear OR T1.PayoutYear=T2.PayoutYear) 
   AND T1.EmployeeID=T2.EmployeeID
   AND T1.PayoutID=T2.PayoutID) AS Iteration
FROM Table1 AS T1;

有效!感谢。