Output row n bằng tổng 2 cột row (n-1) - SQL server

Hi mọi người!

Mình có 1 bảng bao gồm 2 cột “Month” và “Sum sales” như hình dưới, giờ mình muốn tạo thêm một cột “Sum sales Before” là tổng “Sum Sales” của các tháng trước đó, logic như hình excel bên dưới.

Với TH này có ai biết cách truy vấn trên SQL như nào không ạ?

Thanks!

SQL

Bạn muốn nó được insert xuống bằng công thức “= tổng Sum Sales” của các tháng trước hả?

Còn truy vấn từc là nó có data rồi, mình lấy lên xem.

đúng rồi á bạn

mình muốn insert xuống dưới “= tổng Sum sales” của các tháng trước

Bạn có thể tạo trigger, query ra value của cột sum_sale_before trước đó, rồi query sum_sale của tháng hiện tại, cộng tổng lại rồi insert vào

VD:
t1 = 0
t2 = t1 + 110754.16
t3 = t2 + 104243.34
t4= t3 + sale t4

issues:

  • Giả sử qua năm mới thì sao? Bạn có còn muốn tính sum_sale của năm cũ ko
  • Có update sum_sale những tháng trước nó ko, nếu update thì cái cột giá trị sum_sale_before sẽ bị sai, thay vì insert cột mới thì cần gì query ra hay hơn
2 Likes

Cái bạn cần nằm trong nhóm hàm gọi là Analytic Functions.
VD như tôi có dữ liệu như bên dưới:

Sale_Year   Sale_Mon    Sum_Sale
----------- ----------- --------------------
2023        1           10
2023        2           10
2023        3           10
2023        4           10
2023        5           10
2023        6           10
2024        1           20

Sau khi dùng hàm SUM() theo cú pháp của analytic function thì nó sẽ ra như sau:

Sale_Year   Sale_Mon    Sum_Sale             Sum sales Before
----------- ----------- -------------------- --------------------
2023        1           10                   10
2023        2           10                   20
2023        3           10                   30
2023        4           10                   40
2023        5           10                   50
2023        6           10                   60
2024        1           20                   20

Đây là câu lệnh:

SELECT Sale_Year, Sale_Mon, Sum_Sale,
       sum(Sum_Sale) OVER(PARTITION BY sale_year Order by sale_mon) as "Sum sales Before"
FROM monthly_sale
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?