Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Cho hỏi về hàm Sum
#1
Mình dùng hàm Sum trên report mà sao nó tính ra số âm ( có dấu trừ đằng trước)
Yêu cầu của đề bài là tính tổng số học sinh NAM có mã số lớp là A11
Mình dùng hàm sau: =Sum([Gioitinh]='NAM') và trong query nguồn tại trường MasoHS mình chọn Criteria: "A11"
Kết quả ra đúng tổng số hs nhưng là số âm.
Các bạn giúp mình chổ này với!

- Mình đã làm dc rùi...

Bây giờ mình có gặp lỗi chỗ này mong được giúp đỡ
Mình gặp lỗi hàm IIF lồng nhau trên report
Yêu cầu là tính tổng số hs có điểm môn toán là lớn hơn 8 và mã số lớp là A11
Mình dùng hàm sau: =Sum(IIf("[Toan]">'8',1,0) And ("[MasoHS]"='A11',1,0)) nhưng báo lỗi error.
Chữ ký của rainkv rainkv,gia nhập Thủ Thuật Access từ 12-07 -15.
Reply
Những người đã cảm ơn
#2
(30-07-15, 09:47 PM)rainkv Đã viết: Mình dùng hàm Sum trên report mà sao nó tính ra số âm ( có dấu trừ đằng trước)
Yêu cầu của đề bài là tính tổng số học sinh NAM có mã số lớp là A11
Mình dùng hàm sau: =Sum([Gioitinh]='NAM') và trong query nguồn tại trường MasoHS mình chọn Criteria: "A11"
Kết quả ra đúng tổng số hs nhưng là số âm.
Các bạn giúp mình chổ này với!

Mình không biết bạn xử lý data type của trường Gioitinh như thế nào. Nhưng nếu bạn xử lý đó là trường Yes/No, Với Nam = Yes (True), thì =Sum([Gioitinh]=True) là số âm là điều đương nhiên.
Lý do mình nghĩ đây là trường Yes/No vì nếu là trường Text thì với cú pháp =Sum([Gioitinh]='NAM') sẽ bị lỗi.
Trong kiểu dữ liệu Boolean thì True  = - 1 và False = 0, Vì vậy tổng của các số -1 phải là số âm. Muốn nó trờ thành số dương phải xử lý =Abs(Sum([Gioitinh]=True)). Nhưng trong trường hợp này nếu bạn tính tổng của NỮ=Sum([Gioitinh]=False) sẽ luôn luôn có gía trị = 0. Vì vậy, trong trường hợp dùng một trường Yes/No để xử lý cho Giới tính. Khi tính toán trên query phải tạo thành 2 trường NAM = If([Gioitinh]=True,1,0); NU=If([Gioitinh]=False,1,0) rồi mới tính. Hoặc trên tổng của Report thì NAM=Sum(If([Gioitinh]=True,1,0) và NU=Sum(If([Gioitinh]=False,1,0).
Ngoài ra, nếu muốn đơn giản hơn bạn có thể xử lý NAM = Abs(Sum([Gioitinh]=True)), NU=Count([Hocsinh])-NAM nếu bạn không có giới tính thứ 3  007
Chúc bạn thành công.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn rainkv , maidinhdan
#3
(30-07-15, 10:51 PM)tranthanhan1962 Đã viết:
(30-07-15, 09:47 PM)rainkv Đã viết: Mình dùng hàm Sum trên report mà sao nó tính ra số âm ( có dấu trừ đằng trước)
Yêu cầu của đề bài là tính tổng số học sinh NAM có mã số lớp là A11
Mình dùng hàm sau: =Sum([Gioitinh]='NAM') và trong query nguồn tại trường MasoHS mình chọn Criteria: "A11"
Kết quả ra đúng tổng số hs nhưng là số âm.
Các bạn giúp mình chổ này với!

Mình không biết bạn xử lý data type của trường Gioitinh như thế nào. Nhưng nếu bạn xử lý đó là trường Yes/No, Với Nam = Yes (True), thì =Sum([Gioitinh]=True) là số âm là điều đương nhiên.
Lý do mình nghĩ đây là trường Yes/No vì nếu là trường Text thì với cú pháp =Sum([Gioitinh]='NAM') sẽ bị lỗi.
Trong kiểu dữ liệu Boolean thì True  = - 1 và False = 0, Vì vậy tổng của các số -1 phải là số âm. Muốn nó trờ thành số dương phải xử lý =Abs(Sum([Gioitinh]=True)). Nhưng trong trường hợp này nếu bạn tính tổng của NỮ=Sum([Gioitinh]=False) sẽ luôn luôn có gía trị = 0. Vì vậy, trong trường hợp dùng một trường Yes/No để xử lý cho Giới tính. Khi tính toán trên query phải tạo thành 2 trường NAM = If([Gioitinh]=True,1,0); NU=If([Gioitinh]=False,1,0) rồi mới tính. Hoặc trên tổng của Report thì NAM=Sum(If([Gioitinh]=True,1,0) và NU=Sum(If([Gioitinh]=False,1,0).
Ngoài ra, nếu muốn đơn giản hơn bạn có thể xử lý NAM = Abs(Sum([Gioitinh]=True)), NU=Count([Hocsinh])-NAM nếu bạn không có giới tính thứ 3  007
Chúc bạn thành công.

Cám ơn anh 'tranthanhan1962 nhiều.
Sẵn nhờ anh giúp em câu trên với, em gặp lỗi dùng hàm IIF lồng nhau như trên thì em gặp lỗi.
Em ko biết về cấu trúc hàm IIF lồng nhau trên report như thế nào.
Chữ ký của rainkv rainkv,gia nhập Thủ Thuật Access từ 12-07 -15.
Reply
Những người đã cảm ơn
#4
(30-07-15, 09:47 PM)rainkv Đã viết: Mình gặp lỗi hàm IIF lồng nhau trên report
Yêu cầu là tính tổng số hs có điểm môn toán là lớn hơn 8 và mã số lớp là A11
Mình dùng hàm sau: =Sum(IIf("[Toan]">'8',1,0) And ("[MasoHS]"='A11',1,0)) nhưng báo lỗi error.

Data Type của đểm Toán là Number sao bạn lại đặt nó vào dấu nháy. Các cặp "",'' chỉ dành cho kiểu dữ liệu Text mà thôi. Cú pháp phải là =Sum(IIf([Toan]>8,1,0) * ([MasoHS]='A11',1,0)). Tên trường chỉ nằm giữa [] không có ""
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , rainkv
#5
(30-07-15, 11:00 PM)tranthanhan1962 Đã viết:
(30-07-15, 09:47 PM)rainkv Đã viết: Mình gặp lỗi hàm IIF lồng nhau trên report
Yêu cầu là tính tổng số hs có điểm môn toán là lớn hơn 8 và mã số lớp là A11
Mình dùng hàm sau: =Sum(IIf("[Toan]">'8',1,0) And ("[MasoHS]"='A11',1,0)) nhưng báo lỗi error.

Data Type của đểm Toán là Number sao bạn lại đặt nó vào dấu nháy. Các cặp "",'' chỉ dành cho kiểu dữ liệu Text mà thôi. Cú pháp phải là =Sum(IIf([Toan]>8,1,0) * ([MasoHS]='A11',1,0)). Tên trường chỉ nằm giữa [] không có ""

Sao kỳ vậy anh 'tranthanhan1962', em làm mà nó báo lỗi. Em nhập trên Report ý nha anh.
Chữ ký của rainkv rainkv,gia nhập Thủ Thuật Access từ 12-07 -15.
Reply
Những người đã cảm ơn
#6
Do bạn không đưa data lên nên mình cũng không nắm rõ ý đồ khi thiết đặt các công thức lồng hàm của bạn.
Giả sử số lượng của MasoHS có điểm toán lớn hơn 8 là 12. Căn cứ công thức =Sum(IIf("[Toan]">'8',1,0) And ("[MasoHS]"='A11',1,0)) thì nó sẽ báo lỗi vì kiểu dữ liệu của [Toan] phải là số nên cú pháp > '8' là sai, phải là >8 mới đúng,
Nhưng nếu bạn đặt là =Sum(IIf([TOAN]>8;1;0) And IIf([MasoHS]='A11';1;0)) nó sẽ cho ra giá trị là -12. Lý do cứ mỗi IIf([TOAN]>8;1;0) And IIf([MasoHS]='A11';1;0) đúng sẽ cho ra 1 giá trị True = -1 vì vậy 12 * True = -12. Nên tôi phải chỉnh lại thành =Sum(IIf([TOAN]>8;1;0) * IIf([MasoHS]='A11';1;0)) để cho ra giá trị dương là 12.
Đây là cách xử lý đúng khi [TOAN] được thiết đặt data type là number. Trong trường hợp bạn đặt data type của [Toan] không phải là number sẽ bị báo lỗi. cũng có thể do quá trình xử lý trường [TOAN] bị thiết đặt lại kiểu dữ liệu khác dữ kiểu ban đầu thì bạn dùng phương pháp ép kiểu xử lý như sau: =Sum(IIf(Val([TOAN])>8;1;0) * IIf([MasoHS]='A11';1;0)) sẽ không còn bị lỗi
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan


Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ