使用 Access + Subquery 重新格式化数据

Posted

技术标签:

【中文标题】使用 Access + Subquery 重新格式化数据【英文标题】:Reformatting data using Access + Subquery 【发布时间】:2012-01-19 10:06:15 【问题描述】:

我正在尝试重新格式化 MS Access 中的数据,因为行数超出了 Excel 的能力。然而,这是我第一次尝试子查询,并且可以在我应该做的事情上得到一些帮助。

我的数据如下所示:

t, id, x
1, 10, 1
1, 20, 5
1, 30, 10
2, 10, 2
2, 20, 7
2, 30, 14

我正试图将它改造成这个顺序:

id, t1, t2, x1, x2
10, 1,  2,  1,  2
20, 1,  2,  5,  7
30, 1,  2,  10, 14
... 
10, 70, 71, 66, 68

等等。

提供的数据是距离和时间值——所以我想重新格式化上面的数据,然后通过 (x2 - x1) / (t2 - t1) 计算速度。

Access 可以提供帮助吗?对于必须使用多个表/查询来获得最终结果,我并不太在意……只要我到达那里!!!

【问题讨论】:

这里@所以我们提供帮助,但到目前为止你有什么? 到目前为止,主要是逻辑!这是我最初的想法: (1.) 按 id 对数据排序,然后 t (2.) 如果 t+1 处的 id 值不等于 t 处的 id 值,这应该给出 t2 和 x2 的值 (3 .) 如果 t-1 处的 id 值不等于 t 处的 id 值,这应该给出 t1 和 x1 的值 我的逻辑是否经得起推敲? 它们总是奇数和偶数吗? t = 1 与 t = 2.. t = 69 与 t = 70 配对? 这在我看来很像交叉表查询。 @TonyHopkinson 配对并不总是奇偶,但不会彼此相等。例如。在第 1 到第 5 行,t 值可能是 1,但在第 6 到第 12 行,t 值可能是 7。有意义吗? 【参考方案1】:

您需要将数据JOIN 传递给自身,并从联接的左侧获取 t1 和 x1,从右侧获取 t2 和 x2,诀窍就在联接中。

首先,样本数据并没有真正涵盖足够的案例来了解真正需要什么,所以我在推断和猜测......

在时间 t 记录某些 id 的进度 x,并且您想计算每个间隔的 dx/dt t 每次递增,但不一定是 1 t 对于每个 id 都是唯一的 x 会来的。

首先我需要按顺序排列ranked

SELECT 
    (
        SELECT Count(*) 
        FROM Table1
        WHERE [t] < [t1].[t]+1 AND id = t1.id;
    ) AS Rank
    , *
FROM
    Table1 AS t1;

调用这个 Query1 和

SELECT 
      a.id AS id
    , a.t AS t1
    , b.t AS t2
    , a.x AS x1
    , b.x AS x2
    , (b.x - a.x) / (b.t - a.t) as Speed
FROM
    Query1 as a
        INNER JOIN
    Query1 as b
        ON
                a.id = b.id 
            AND (a.rank + 1) = b.rank

鲍勃是你的叔叔

【讨论】:

【参考方案2】:

你可以使用sql server吗?或者您只是想通过使用 Access/Excel 来做到这一点?如果您想获得真正的简单和创意,您也可以使用 TextPad 宏来执行此操作......尤其是如果行始终按该顺序排列。

【讨论】:

【参考方案3】:

从您的原始数据创建一个交叉表查询...然后使用另一个查询从交叉表查询中选择另一个表。

【讨论】:

以上是关于使用 Access + Subquery 重新格式化数据的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007:无法识别的数据库格式

Ms Access 像这样将两行合二为一

是否可以在 NSPredicate 中使用嵌套的 SUBQUERY?

Symfony3 QueryBuilder使用Subquery进行更新

Swift NSPredicate SUBQUERY with NOT IN?

nginx配置log_format日志格式不生效