PDA

View Full Version : Query tính tổng dòng trước và dòng hiện tại



IronMan1982
01-09-2010, 08:48
Chào các bạn!

Mình đang làm 1 report liên quan tới kho. Tuy nhiên hiện tại mình đang gặp chút khó khăn khi viết query. Cụ thể như sau:

Mình có 1 table Sản phẩm chứa mặt hàng, số lượng như sau:

Mặt hàng: A
Số lượng: 1

Mặt hàng: B
Số lượng: 2

Mặt hàng: C
Số lượng: 3

Giờ mình muốn viết 1 query trả về kết quả như sau:

Mặt hàng Số lượng
A 1
B 3 Bằng 1 (của A) + 2 (của B)
C 6 (Bằng 3 (của A và B) + 3 (của C)

Bạn nào biết giúp mình với nhé.

Mình xin cảm ơn.

Red Devilic
01-09-2010, 09:20
Lần đầu tiên mới nhìn thấy cách thức truy vấn như của bạn

Theo mình bạn có thể xem xét 2 cách sau đây

- Với dữ liệu chưa nhập, bạn có thể tạo 1 cột lưu giá trị cần tính toán này luôn. Tránh việc mỗi lần query phải tính toán lại.
Khi nhập dữ liệu, giá trị tổng = sum( số lượng ) các mặt hàng đã có trong kho

- Cách thứ 2:
Bạn không nói rõ cấu trúc bảng của bạn như thế nào, các mặt hàng có phải duy nhất hay không, khóa chính thế nào. Nếu chỉ cung cấp như bạn nói, mình sẽ giải quyết vấn đề theo đúng đề bài của bạn theo cách hiểu của mình

+ Mỗi mặt hàng xuất hiện duy nhất 1 lần (1)
+ Khóa chính là mặt hàng
+ Do đó, thứ tự sắp xếp trong bảng coi như là tăng dần về giá trị ( A rồi đến B hoặc C, trong trường hợp thứ tự sắp xếp không phải như vậy, bạn cũng có thể tạo 1 cột IDENTITY nếu thỏa mãn (1)



Select MatHang,
sum(Select SoLuong
from tableKho B
where B.MatHang <= A.MatHang) TongSo
FROM tableKho A
Group By MatHang

IronMan1982
01-09-2010, 09:48
Câu lệnh của bạn sai chỗ nào đó khi execute query không chạy được

[=========> Bổ sung bài viết <=========]


Lần đầu tiên mới nhìn thấy cách thức truy vấn như của bạn

Theo mình bạn có thể xem xét 2 cách sau đây

- Với dữ liệu chưa nhập, bạn có thể tạo 1 cột lưu giá trị cần tính toán này luôn. Tránh việc mỗi lần query phải tính toán lại.
Khi nhập dữ liệu, giá trị tổng = sum( số lượng ) các mặt hàng đã có trong kho

- Cách thứ 2:
Bạn không nói rõ cấu trúc bảng của bạn như thế nào, các mặt hàng có phải duy nhất hay không, khóa chính thế nào. Nếu chỉ cung cấp như bạn nói, mình sẽ giải quyết vấn đề theo đúng đề bài của bạn theo cách hiểu của mình

+ Mỗi mặt hàng xuất hiện duy nhất 1 lần (1)
+ Khóa chính là mặt hàng
+ Do đó, thứ tự sắp xếp trong bảng coi như là tăng dần về giá trị ( A rồi đến B hoặc C, trong trường hợp thứ tự sắp xếp không phải như vậy, bạn cũng có thể tạo 1 cột IDENTITY nếu thỏa mãn (1)



Select MatHang,
sum(Select SoLuong
from tableKho B
where B.MatHang <= A.MatHang) TongSo
FROM tableKho A
Group By MatHang


Cám ơn bạn nhiều nhé. Tôi đã xử lý được rồi.