SQL Как суммировать ячейки из одной строки с ячейкой из предыдущей строки с дополнительным условием для первой строки

Рейтинг: 0Ответов: 1Опубликовано: 04.08.2023

есть данные по загрузке tbl1

есть данные по отгрузке tbl2

есть данные по остатку на складе на конец месяца tbl3

tbl1:                   tbl2:                       tbl3:
date        A           date        B               date        X   
01/06/23    7           01/06/23    5               01/06/23    6
02/06/23    9           02/06/23    6               
03/06/23    3           03/06/23    7               
04/06/23    8           04/06/23    6               
05/06/23    6           05/06/23    8               

Необходимо рассчитывать остаток на складе на конец дня:

для С1 это X+A1-B1

для С2 и далее это C1+A2-B2

ожидаемый результат:

id  date        A   B   C
1   01/06/23    7   5   8
2   02/06/23    9   6   11
3   03/06/23    3   7   7
4   04/06/23    8   6   9
5   05/06/23    6   8   7

как такое можно сделать на ms sql?

Ответы

▲ 1Принят

Вариант:

SELECT tA.Cnt as id, tbl1.opdate AS date, tbl1.A, tB.B, tX.X+tA.TOTA-tB.TOTB AS C    
FROM ((tbl1 INNER JOIN (
    SELECT tbl1.opdate AS D, SUM(t.A) AS TOTA, Count(t.A) AS Cnt
    FROM tbl1 INNER JOIN
      tbl1 AS t ON t.opdate<=tbl1.opdate
        AND t.opdate>=datefromparts(year(tbl1.opdate),month(tbl1.opdate),1)
    GROUP BY tbl1.opdate) AS tA ON tbl1.opdate=tA.D)
  INNER JOIN (
    SELECT tbl2.opdate AS D, SUM(t.B) AS TOTB, tbl2.B
    FROM tbl2 INNER JOIN
      tbl2 AS t ON t.opdate<=tbl2.opdate
        AND t.opdate>=datefromparts(year(tbl2.opdate),month(tbl2.opdate),1)
    GROUP BY tbl2.opdate, tbl2.B) AS tB ON tbl1.opdate=tB.D)
  INNER JOIN tbl3 AS tX ON year(tX.opdate)=year(tbl1.opdate)
      and month(tX.opdate)=month(tbl1.opdate)

SQLFiddle

В таблицах заменил date на opdate.