2012-10-19 24 views
1

我有一张大表,其中包含我项目中每个报告期的记录。 周期由一个整数1,2,3,4,5,6,7确定。比较报告期间的数据MS Access

每个周期包含大约7000行任务,每个任务都标识一个唯一的ID。这些任务都有一个完整的列,这是一个整数。

我想添加一个比较列。 所以它会查找上一个期间的唯一ID,然后返回完成百分比的差异。

如 为 时间:8物品唯一ID:42w3wer324wer32完成百分比:50

会发现: 时间:7物品唯一ID:42w3wer324wer32完成百分比:40

填充在现场搭配:10

如果找不到前一时期的物品唯一ID那就默认为0。

感谢

回答

0

据我了解你的描述,你可以拉的数据周期为8这样的:

SELECT item_id, pct_complete 
FROM YourTable 
WHERE rpt_period = 8; 

而且前一段时间将是相同的查询,除了用7期。

因此,采取的周期为8的查询和离开它加入到一个子查询期间7.

SELECT 
    y.item_id, 
    (y.pct_complete - Nz(sub.pct_complete, 0)) AS change_in_pct_complete 
FROM YourTable AS y 
LEFT JOIN 
    (
     SELECT item_id, pct_complete 
     FROM YourTable 
     WHERE rpt_period = 7 
    ) AS sub 
ON y.item_id = sub.item_id 
WHERE rpt_period = 8; 

即当没有周期7存在匹配一段8 item_idNz()表达式将为空代替0。

如果您需要的查询不会在Access会话中运行,则Nz()函数将不可用。在这种情况下,您可以使用IIf()表达式......这并不简单,但它会完成工作。

IIf(sub.pct_complete Is Null, 0, sub.pct_complete) 
+0

谢谢。有没有办法扩展它,以便它查看特定行项目的rpt_period的值,而不是明确指出rpt_period = 8? – KillerSnail

+0

您可以使用较近期间的参数,前一期间使用参数-1。这听起来像你想到的? – HansUp

+0

然后,我会使用某种循环来运行并更改参数的值? – KillerSnail