1

我有一个大表,其中包含我项目中每个报告期的记录。周期由整数 1、2、3、4、5、6、7 标识。

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

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

例如,期间:8 项目唯一 ID:42w3wer324wer32 完成百分比:50

它会找到:期间:7 项目唯一 ID:42w3wer324wer32 完成百分比:40

在该字段中填写:10。

如果它在上一期间找不到项目唯一 ID,则默认为 0。

谢谢

4

1 回答 1

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;

Nz()当周期 8 不存在周期 7 匹配时,该表达式将用 0 替换 Null item_id

如果您需要一个不会在 Access 会话中运行的查询,则该Nz()功能将不可用。在这种情况下,您可以使用IIf()表达式......它不是那么简洁,但它可以完成工作。

IIf(sub.pct_complete Is Null, 0, sub.pct_complete)
于 2012-10-19T02:20:59.943 回答