Разделите последовательные записи - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть таблица в MS Access, например:

таблица

+-----+-----+-----+
| 1st | 2nd | 3rd |
+-----+-----+-----+
| A   |   1 | 100 |
| A   |   2 | 200 |
| A   |   3 | 300 |
| B   |   1 | 100 |
| B   |   2 | 200 |
| B   |   3 | 300 |
| C   |   1 | 100 |
| C   |   2 | 200 |
| C   |   3 | 300 |
+-----+-----+-----+

Теперь я хочу прочитать значения из 3-го столбца, сделать что-то вродеманипулирование им и сохранение их в другой таблице, например:

сводка

+-----+---------+---------+
| 1st |   2nd   |   3rd   |
+-----+---------+---------+
| A   | 100/200 | 200/300 |
| B   | 100/200 | 200/300 |
| C   | 100/200 | 200/300 |
+-----+---------+---------+

Другими словами, для summary.2nd это означает:

select table.3rd FROM table where table.1st = A AND table.2nd = 1

делится на

select table.3rd FROM table where table.1st = A AND table.2nd = 3

Может кто-нибудь подсказать мне, как это можно сделать?

Может быть, VBA / ADO Recordset и т. Д.?

Ответы [ 3 ]

0 голосов
/ 09 февраля 2019

Один метод условного агрегирования:

select [1st],
       max(iif([2nd] = 1, [3rd], null)) / max(iif([2nd] = 2, [3rd], null)) as [2nd],
       max(iif([2nd] = 2, [3rd], null)) / max(iif([2nd] = 3, [3rd], null)) as [3rd]
from t
group by [1st];
0 голосов
/ 09 февраля 2019

Вот еще один вариант, использующий вычисленные критерии соединения:

select 
    t1.[1st], 
    t1.[3rd]/t2.[3rd] as [2nd], 
    t2.[3rd]/t3.[3rd] as [3rd]
from 
    (
        [table] t1 inner join [table] t2 
        on t1.[1st] = t2.[1st] and t1.[2nd] = t2.[2nd]-1
    )
    inner join [table] t3 
    on t1.[1st] = t3.[1st] and t1.[2nd] = t3.[2nd]-2

Поскольку значения столбцов 2nd 1, 2 и 3 не жестко заданы, это применимо к любым трем целым числам в 2nd столбец, значения которого отличаются последовательно на единицу.

Замените [table] на имя вашей таблицы.

0 голосов
/ 09 февраля 2019

Попробуйте этот SQL

INSERT INTO Summary 
SELECT DISTINCT a.[1st], 
                a.[3rd] / b.[3rd] AS [2nd], 
                a.[3rd] / c.[3rd] AS [3rd] 
FROM   ((tbl AS a 
         INNER JOIN tbl AS b 
                 ON a.[1st] = b.[1st]) 
        INNER JOIN tbl AS c 
                ON a.[1st] = c.[1st] ) 
WHERE  a.[2nd] = 1 
       AND b.[2nd] = 2 
       AND c.[2nd] = 3 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...