Как я могу вычесть два значения строки в одном столбце с помощью SQL-запроса в доступе? - PullRequest
0 голосов
/ 05 мая 2019

(запрос доступа)

Это структура таблицы:

+-----+--------+--------+
| id  |  name  |  sub1  |
+-----+--------+--------+
|  1  |  ABC   |  6.27% |
|  2  |  ABC   |  7.47% |
|  3  |  PQR   |  3.39% |
|  4  |  PQR   |  2.21% |
+-----+--------+--------+

Я хочу вычесть Sub1

Вывод должен быть:

+-----+--------+---------+------------------------------------+
| id  |  name  |  sub1   |                                    |
+-----+--------+---------+------------------------------------+
|  1  |  ABC   |  6.27%  |  0      First Rec no need Subtract |
|  2  |  ABC   |  7.47%  |  1.2%   <=(7.47-6.27)              |
|  3  |  PQR   |  3.39%  |  0      First Rec no need Subtract |
|  4  |  PQR   |  2.21%  |  -1.18% <=(2.21-3.39)              |
+-----+--------+---------+------------------------------------+

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Если вы можете гарантировать последовательные значения id, то следующее представляет альтернативу:

select t.*, nz(t.sub1-u.sub1,0) as sub2
from YourTable t left join YourTable u on t.name = u.name and t.id = u.id+1

Измените YourTable на имя вашей таблицы.

0 голосов
/ 05 мая 2019

Это больно, но вы можете сделать:

select t.*,
       (select top 1 t2.sub1
        from t as t2
        where t2.name = t.name and t2.id < t.id
        order by t2.id desc
       ) as prev_sub1
from t;

Это дает предыдущее значение или NULL для первого ряда.Вы можете просто использовать - для вычитания.

Индекс на (name, id) немного поможет с производительностью.Однако, если вы можете перейти на более качественную базу данных, вы можете просто использовать lag().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...