Hoàng Nhật Phương
Thành viên gắn bó



- Tham gia
- 5/11/15
- Bài viết
- 1,895
- Được thích
- 1,219
Xin chào anh Hai Lúa, sau một hồi loay hoay với câu lệnh truy vấn bên dưới của anh OT đã ứng dụng thử vào SQL được rồi ạ, cảm ơn anh Hai Lúa nhiều ạ.Em nên nghiên cứu thêm về các kiểu truy vấn nhé.
Mã:SELECT A.MA_HANG, B.TEN_HANG, SUM(TONDAUKY), KHO_LUU_TRU, SUM(NHAP), SUM(XUAT), SUM(TON) FROM (" & strSQL & ") A INNER JOIN [DMHH$] B ON A.MA_HANG=B.MA_HANG GROUP BY A.MA_HANG, KHO_LUU_TRU, B.TEN_HANG
Mã:
SELECT NXT.[MA_HANG],NXT.[LOTNO],--MH.[TEN_HANG],
SUM(TONDAUKY) AS [TONDAUKY],SUM(NHAP) AS [NHAP],SUM(XUAT) AS [XUAT],SUM(TON) AS [TON]
FROM (
SELECT TDK.[MA_HANG], TDK.[KHO_LUU_TRU],TDK.[LOTNO], TDK.[QTY] AS [TONDAUKY], 0 AS [NHAP],0 AS [XUAT], TDK.[QTY] AS [TON]
FROM [KHOHANG].[dbo].[TONDAUKY] TDK WHERE (TDK.[MA_HANG]= N'MH0001' AND TDK.[LOTNO]=N'L246357' AND TDK.[KHO_LUU_TRU] LIKE N'%A%')
UNION ALL
SELECT XN.[MA_HANG], XN.[KHO_LUU_TRU],XN.[LOTNO], 0, IIF(XN.[KIEU]='N',XN.[QTY],0) AS [NHAP],IIF(XN.[KIEU]='X',XN.[QTY],0) AS [XUAT], IIF(XN.[KIEU]='N',XN.[QTY],0)-IIF(XN.[KIEU]='X',XN.[QTY],0)
FROM [KHOHANG].[dbo].[XN] XN WHERE (XN.[MA_HANG]= N'MH0001' AND XN.[LOTNO]=N'L246357' ) AND (XN.[NGAY_TT] >='20201001' AND XN.[NGAY_TT] <='20201007')
) NXT
--INNER JOIN [KHOHANG].[dbo].[DMHH] MH ON NXT.[MA_HANG]=MH.[MA_HANG]
GROUP BY NXT.[MA_HANG],NXT.[LOTNO]--,MH.[TEN_HANG]
--INNER JOIN [KHOHANG].[dbo].[DMHH] MH ON NXT.[MA_HANG]=MH.[MA_HANG]
--MH.[TEN_HANG]
Thì kết quả mới chạy đúng. híc nhìn câu lệnh mới truy vấn theo vài trường mà thấy dài thấy khiếp quá.
---
Còn nếu để tham chiếu đến [DMHH] nó sẽ trả về kết quả sai ạ, không biết OT còn sai sót nào không anh:
Mã:
TONDAUKY = 1050.000;
NHAP = 2723.000;
XUAT = 2800.000;
TON = 973.000
Bài đã được tự động gộp:
Xin chào bạn excel_lv1.5,join nó giống hàm lookup trong excel cho phép tìm kiếm nhiều điều kiện
Thì tôi nói là bạn làm NXT theo 3 yếu tố [mahang],[kho_luu_tru],[lotno] nên bảng DMHH sẽ không sử dụng được do nó chỉ có [mahang], nên bạn dùng cách union thì sẽ ổn hơn.
Còn vẫn muốn đi theo hướng đó thì bạn có thể thêm 1 đoạn tạo ra một bảng table DMHH mới như vầy, rồi chạy lại đoạn code trên (hoặc lồng vào đoạn code trên cũng được)
Mã:select DISTINCT [ma_hang],[kho_luu_tru],[lotno] into #dmhh from ( select [ma_hang],[kho_luu_tru],[lotno] from [TDK] union all select [ma_hang],[kho_luu_tru],[lotno] from [NX] ) a
OT thử chạy câu lệnh này trước trước SQL hệ thống hiển thị thông báo thành thông , chạy lần thứ 2 không được như vậy có nghĩa là đã có dmhh?
Chỗ này bạn cho hỏi OT thêm khi chạy thế này mặc dù là câ lệnh Select nhưng nó có đưa dữ liệu thêm mới vào bảng dmhh trong DB không ạ?
Nếu nó thêm vào có lẽ là làm theo cách này không được an toàn phải không ạ.
Và tiếp theo OT chạy lại câu #188 thì dữ liệu vẫn không xuất hiện gì ạ, hihi dù sao vấn đề của OT cũng đã được giải quyết theo cách làm của anh Hai Lúa được rồi nên bạn không cần phải bận tâm nữa đâu ạ.
Nếu không sử dụng được các câu lệnh truy vấn kiểu SQL nữa OT cũng đã nghĩ đến việc lấy dữ liệu của từng bảng về theo các điều kiện truy vấn rồi dùng VBA xử lý ra dữ liệu NXT ạ, nhưng cách này nếu người dùng lọc khoảng thời gian dài mà bản ghi nhiều chắc là ngồi khóc

Xin cảm ơn tất cả mọi người đã giúp đỡ OT ạ.
Kính chúc mọi người buổi tối vui khỏe.

Lần chỉnh sửa cuối: