-
Thắc mắc về joining nhiều table
longlv > 16-10-15, 12:23 PM
Em là thành viên mới, các bác vui lòng giúp đỡ tình huống sau:
Có 04 bảng khác nhau như ở dưới
1) Bảng1: T_CODE (chứa master mã hàng)
Item_Code
A
B
C
D
2) Bảng 2: T_MONTHLY_STOCK (Chứa dữ liệu tồn kho, ở đây là tháng 9
Item_Code Qty Month
A 1000 201509
B 2000 201509
C 3000 201509
3) Bảng 3: T_SALES (Tình hình bán hàng theo từng tuần)
Item_Code Qty Week
A 5 1
B 4 1
A 50 2
B 40 2
4) Bảng4: T_RECEIPT (Tình hình nhận hàng theo tuần)
Item_Code Qty Week
A 1 1
B 2 1
A 10 2
B 20 2
Mình muốn trả về Query như dưới đây:
Item_Code Stock In_Week_1 Out_Week_1 Balance_Week_1
A 1000 1 5 996
B 2000 2 4 1998
C 3000 0 0 3000
D 0 0 0 0
Mình đã thử dùng Query bằng cách liên kết các bảng nhưng kết quả trả về không đúng
Item_Code Stock In_Week_1 Out_Week_1 Balance_Week_1
A 1000 2 10 992
B 2000 4 8 1996
C 3000 0 0 3000
D 0 0 0 0
Và query của mình như sau:
SELECT T_CODE.Item_Code
, IIf(IsNull([T_MONTHLY_STOCK]![Item_code]),0,[T_MONTHLY_STOCK]![Qty]) AS Stock
, Sum(IIf([T_RECEIPT]![Week]=1,[T_RECEIPT]![Qty],0)) AS In_Week_1
, Sum(IIf([T_SALES]![Week]=1,[T_SALES]![Qty],0)) AS Out_Week_1
, IIf(IsNull([T_CODE]![Item_Code]),0,[T_MONTHLY_STOCK]![Qty])
+Sum(IIf([T_RECEIPT]![Week]=1,[T_RECEIPT]![Qty],0))
-Sum(IIf([T_SALES]![Week]=1,[T_SALES]![Qty],0)) AS Balance_Week_1
FROM
((T_CODE LEFT JOIN T_MONTHLY_STOCK ON T_CODE.Item_Code = T_MONTHLY_STOCK.Item_code)
LEFT JOIN T_SALES ON T_CODE.Item_Code = T_SALES.Item_code)
LEFT JOIN T_RECEIPT ON T_CODE.Item_Code = T_RECEIPT.Item_code
GROUP BY
T_CODE.Item_Code
, IIf(IsNull([T_CODE]![Item_Code]),0,[T_MONTHLY_STOCK]![Qty]);
Rất mong các bác hướng dẫn thêm.
Trân trọng cảm ơn -
RE: Thắc mắc về joining nhiều table
tranthanhan1962 > 16-10-15, 04:53 PM
Bạn post dữ liệu lên mọi người sẽ dể dàng hỗ trợ hơn. -
RE: Thắc mắc về joining nhiều table
longlv > 16-10-15, 09:36 PM
(16-10-15, 04:53 PM)tranthanhan1962 Đã viết: Bạn post dữ liệu lên mọi người sẽ dể dàng hỗ trợ hơn.
Cảm ơn bạn. Bạn xem file giúp mình nhé File access
Mình không biết up file lên nên đành dùng mediafile vậy
http://www.mediafire.com/download/s65fe7...base.accdb -
RE: Thắc mắc về joining nhiều table
tranthanhan1962 > 17-10-15, 01:10 AM
Hình như bạn đang cố gắng xử lý access bằng dữ liệu của các bảng excel.
Nếu giữ nguyên các table như thế để xử lý cũng được nhưng làm như vậy là sai nguyên tắc access (mỗi tuần bạn phải xử lý để lọc bằng một query khác nhau, và như thế bạn đã vi phạm luật của access. Vì access là “làm một lần giải quyết cho tất cả”. Còn nếu làm theo cách của bạn mỗi tuần phải làm một query).
Giải pháp đề nghị:
Để cho dễ dàng hơn tôi sẽ chuyển hết sang tiếng việt (để làm cho nhanh).
Phân tích:
Tên hàng (Item_Code): A,B,C,D
Tồn kho (MONTHLY_STOCK) tháng 9/2015 với số lượng (Quantity) A =1000, B = 2000, C = 3000, D = 0
Nghiệp vụ: Có 2 nghiệp vụ: Nhận hàng (RECEIPT), Bán hàng (SALES)
Tuần (Week): Bạn tính tồn kho theo tuần.
Từ cơ sở dữ liệu của bạn tôi sẽ thiết kế lại như sau:
Table: có 3 table (Tên hàng – tlbTenHang, Tuần – tlbTuan, Phát sinh – tlbPhatSinh)
Dữ liệu các table như sau:
Trong tlbTuan có tuần 0 được xem như là tồn đầu tháng 9/2015
Mã:Tạo query Q_Tonkho0 từ tlbPhatSinh:
SELECT tlbPhatSinh.TenHang, tlbPhatSinh.SLNhan, tlbPhatSinh.SLBan
FROM tlbPhatSinh
WHERE (((tlbPhatSinh.Tuan)<=[Tuần]));
Tạo query total Q_Tonkho từ Q_Tonkho0:
Mã:SELECT Q_Tonkho0.TenHang, Sum(Q_Tonkho0.SLNhan) AS SLNhan, Sum(Q_Tonkho0.SLBan) AS SLBan, [SLNhan]-[SLBan] AS SLTon
FROM Q_Tonkho0
GROUP BY Q_Tonkho0.TenHang;
Khi gọi query Q_Tonkho bạn chỉ cần điền giá trị tuần nào nó sẽ tổng hợp tồn kho đến tuần đó.
Nếu xử lý ứng dụng cho nhiều năm bạn có thể thêm field Nam để làm điều kiện, Nếu bạn làm cho công ty nước ngoài bạn có thể đặt lại tên Field, Table theo tiếng anh (mình dịch ra tiếng việt để tiện hướng dẫn) -
RE: Thắc mắc về joining nhiều table
longlv > 17-10-15, 12:38 PM
Cảm ơn @tranthanhan1962 rất nhiều. Mình sẽ làm theo cách của bạn hướng dẫn