Cách sử dụng DSUM với AND, OR trong Access (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

darkmoon

Thành viên chính thức
Tham gia
19/12/06
Bài viết
95
Được thích
158
Nghề nghiệp
Thất nghiệp
Em muốn tính tổng SoTien trong query qLCTT với điều kiện TaiKhoanNo là tài khoản tiền và TaiKhoanCo là 133 hoặc 331.
Em dùng công thức:
=DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133 or LEFT([TaiKhoanCo],3) like 331")

Tuy nhiên, cái này nó cộng luôn cái nào TaiKhoanCo là 331 mà ko cần TaiKhoanNo là 11, em ko biết công thức trên đã đúng chưa, mong các anh chị giúp em với.

Thanks}}}}}
 
Thêm vài cái mở ngoặc đóng ngoặc thử xem, thí dụ:
and (LEFT([TaiKhoanCo],3) like 133 or LEFT([TaiKhoanCo],3) like 331)

Cũng như tính toán: nhân chia trước cộng trừ sau, trong ngoặc trước, ngoài ngoặc sau vậy đó. Ở đây là ưu tiên Not - And - Or, và vẫn trong ngoặc trước, ngoài ngoặc sau. Ngoặc trong cùng trước, ngoặc ngoài sau.
Ngoài ra phải biết mình muốn làm gì nữa.
 
Lần chỉnh sửa cuối:
Thêm vài cái mở ngoặc đóng ngoặc thử xem, thí dụ:
and (LEFT([TaiKhoanCo],3) like 133 or LEFT([TaiKhoanCo],3) like 331)

Cũng như tính toán: nhân chia trước cộng trừ sau vậy đó. Ở đây là ưu tiên Not - And - Or.
Ngoài ra phải biết mình muốn làm gì nữa.
Dear anh,

Thanks anh nhiều, lúc trước em cũng có thêm bộ (), tuy nhiên, em lại đóng ngoặc ở sau dấu " nên thành ra nó bị lỗi.
Còn vấn đề nữa là em ko biết dùng công thức nào để nó biến kiểu null về 0, ví dụ trong công thức dưới, nếu giả sử một trong 2 or bị null thì cả DSUM đều null.

Thanks.
 
(LEFT([TaiKhoanCo],3) like 133 or LEFT([TaiKhoanCo],3) like 331)
Sao TaikhoanCo lại có thể Null nhỉ? Và, Sao TaiKhoanCo Null lại chuyển về zero? Tôi không hiểu chỗ này, mong bạn giải thích.
 
(LEFT([TaiKhoanCo],3) like 133 or LEFT([TaiKhoanCo],3) like 331)
Sao TaikhoanCo lại có thể Null nhỉ? Và, Sao TaiKhoanCo Null lại chuyển về zero? Tôi không hiểu chỗ này, mong bạn giải thích.
Dạ không, có nghĩa là sẽ trả về NULL nếu ko có số tiền phát sinh thỏa mãn điều kiện TaiKhoanNo like 11 và TaiKhoanCo like 331 chẳng hạn, mặc dù có số tiền thỏa mãn TaiKhoanNo like 11 và TaiKhoanCo like 133
 
Có thể là cái này:
Mã:
=IIf (IsNull (DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133"), 0, DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133")) +
IIf (IsNull (DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"), 0, DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"))

hoặc không dùng DSum:

= Sum(IIf(LEFT([TaiKhoanNo],2) like '11' and (LEFT([TaiKhoanCo],3) like '133' or LEFT([TaiKhoanCo],3) like '331'), [Sotien], 0))
 
Có thể là cái này:
Mã:
=IIf (IsNull (DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133"), 0, DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133")) +
IIf (IsNull (DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"), 0, DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"))

hoặc không dùng DSum:

= Sum(IIf(LEFT([TaiKhoanNo],2) like '11' and (LEFT([TaiKhoanCo],3) like '133' or LEFT([TaiKhoanCo],3) like '331'), [Sotien], 0))


Thanks anh, cái đó hơi nhiều, em nghĩ có lẽ chỉ cần viết 1 function là

Function cnull(expr As Variant)
If IsNull(expr) Then
cnull = 0
Else
cnull = expr
End If
End Function
 
Dĩ nhiên dùng hàm là tốt hơn rồi, nhưng vì tôi nghĩ đang dùng công thức tính cho 1 textbox trên form hoặc trên Report, hoặc tính cho 1 field trong Query, nên mới phải làm như vậy í chứ.
 
nếu có hàm CNull() như trên rồi, mà sử dụng DSum thì sẽ là:
Mã:
=Cnull(DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133")) +
Cnull(DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"))

So với Sum(IIf()) thì vẫn dài hơn.
 
nếu có hàm CNull() như trên rồi, mà sử dụng DSum thì sẽ là:
Mã:
=Cnull(DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 133")) +
Cnull(DSUM("[SoTien]","qLCTT","LEFT([TaiKhoanNo],2) like 11 and LEFT([TaiKhoanCo],3) like 331"))

So với Sum(IIf()) thì vẫn dài hơn.

Trong Access đã cho ta một hàm built-in để làm vấn đề này rồi. Hàm Nz().
 
Web KT

Bài viết mới nhất

Back
Top Bottom