使用Access +子查询重新格式化数据

时间:2011-12-13 14:25:44

标签: sql ms-access reformat

我正在尝试重新格式化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吗?我不太喜欢不得不使用多个表/查询来达到最终结果......只要我到达那里就可以了!!!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你需要JOIN数据到自己,并从连接的左边得到t1和x1,从右边得到t2和x2,诀窍是在连接中。

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

  • 在时间t,您记录某些ID的进度x,并且您希望计算每个间隔的dx / dt
  • t每次递增,但不一定是一次
  • 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 :(得分:0)

你能用sql server吗?或者您只是尝试使用Access / Excel执行此操作?你也可以使用TextPad宏来实现这一点,如果你想要真正简单和有创意......特别是如果行始终按照这个顺序。