phamthainguyen86 > 04-10-13, 04:11 PM
phamthainguyen86 > 05-10-13, 10:18 PM
(04-10-13, 04:11 PM)phamthainguyen86 Đã viết: Mình làm phần mềm tính điểm trung bình môn học cho học sinh trung học cơ sở như sau:
Kiểm tra miệng và 15 phút thì hệ số 1, kiểm tra 1 tiết hệ số 2, kiểm tra học kì hệ số 3.
mình cần làm một hàm tính tổng các cột không rỗng của ktra: miệng + 15 phút + 2 x (số cột ktra 1 tiết) + 3
sau đó tính tổng điểm: (tổng miệng + 15 phút) + tổng 1 tiết x 2 + kiểm tra học kì x 3
sau đó tính điểm trung bình: tổng điểm:tổng cột không rỗng
nhưng làm mãi vẫn không ra nhờ các anh em trên diễn đàn giúp. Đây là cơ sở dữ liệu
http://www.mediafire.com/download/rrqp6w...U+LIEU.mdb
paulsteigel > 06-10-13, 12:21 AM
(05-10-13, 10:18 PM)phamthainguyen86 Đã viết: Các bạn ơi giúp mình với, vấn đề là làm sao tạo query có cột đếm, sẽ đếm các cột không trống từ m1 đến t5 nhưng mình xài hàm count trong query nó cứ báo sai hoài hà[1. Câu hỏi 1]
SELECT a.MSHS, nz(a.M1,0)+nz(a.M2,0)+nz(a.[15P1],0)+nz(a.[15P2],0)+nz(a.[15P3],0)+nz(a.[15P4],0)+nz(a.T1,0)+nz(a.T2,0)+nz(a.T3,0)+nz(a.T4,0)+nz(a.T5,0) AS Tongdiem, 11-Int((nz(a.M1,1000)+nz(a.M2,1000)+nz(a.[15P1],1000)+nz(a.[15P2],1000)+nz(a.[15P3],1000)+nz(a.[15P4],1000)+nz(a.T1,1000)+nz(a.T2,1000)+nz(a.T3,1000)+nz(a.T4,1000)+nz(a.T5,1000))/1000) AS Socot
FROM [T-DIEM] AS a;
Function CalculateMark(theText As String) As Single
Dim Arr As Variant, i As Long, SumVal As Single, xCounter As Long
' Tach chuoi dau vao thanh mang
Arr = Split(theText, ",")
' Duyet qua mang
For i = 0 To UBound(Arr)
' Kiem tra xem du lieu co gia tri khong, neu co thi tinh tong va dem
If Val(Arr(i)) > 0 Then
SumVal = SumVal + Val(Arr(i))
xCounter = xCounter + 1
End If
Next
If xCounter > 0 Then
' Chi thuc hien phep chia khi co so lieu
CalculateMark = SumVal / xCounter
End If
End Function
SELECT a.MSHS, CalculateMark(a.M1 & "," & a.M2 & "," & a.[15P1] & "," & a.[15P2] & "," & a.[15P3] & "," & a.[15P4] & "," & a.T1 & "," & a.T2 & "," & a.T3 & "," & a.T4 & "," & a.T5) AS Diemtrungbinh
FROM [T-DIEM] AS a;
phamthainguyen86 > 06-10-13, 11:32 PM
(06-10-13, 12:21 AM)paulsteigel Đã viết:Thanks bạn rất nhiều!(05-10-13, 10:18 PM)phamthainguyen86 Đã viết: Các bạn ơi giúp mình với, vấn đề là làm sao tạo query có cột đếm, sẽ đếm các cột không trống từ m1 đến t5 nhưng mình xài hàm count trong query nó cứ báo sai hoài hà[1. Câu hỏi 1]
Bạn có thể sử dụng cấu trúc sau với việc dùng hàm nz để kiểm soát các cột có số liệu rỗng
Cách này sẽ không chính xác nếu số liệu =0. Nếu muốn giải quyết tình huống số liệu = 0 thì bạn dùng cấu trúcMã PHP:SELECT a.MSHS, nz(a.M1,0)+nz(a.M2,0)+nz(a.[15P1],0)+nz(a.[15P2],0)+nz(a.[15P3],0)+nz(a.[15P4],0)+nz(a.T1,0)+nz(a.T2,0)+nz(a.T3,0)+nz(a.T4,0)+nz(a.T5,0) AS Tongdiem, 11-Int((nz(a.M1,1000)+nz(a.M2,1000)+nz(a.[15P1],1000)+nz(a.[15P2],1000)+nz(a.[15P3],1000)+nz(a.[15P4],1000)+nz(a.T1,1000)+nz(a.T2,1000)+nz(a.T3,1000)+nz(a.T4,1000)+nz(a.T5,1000))/1000) AS Socot
FROM [T-DIEM] AS a;
iif(a.M1>0,a.M1,0)+....
Bạn thử tìm hiểu tại sao ở trên tôi lại có số phép toàn rất lạ 11-Int(nz(...,1000)) sau đó lại có phép chia lấy phần nguyên INT(..../1000)
Nếu không muốn dùng cách đó, bạn có thể sử dung VBA, nhưng với cách bạn đặt câu hỏi cho thấy bạn chưa thể dùng VBA được vì thế cách tôi giới thiệu ở trên là một phương án khả dĩ.
Tuy nhiên để giúp bạn, tôi xin giới thiệu một hàm đơn giản để phục vụ tính toán như dưới đây
Bạn viết thêm một hàm CalculateMark, hàm đơn giản như trong đoạn mã này:
Sau đó bạn gọi hàm đó trong truy vấn với dạng thức sau:Mã PHP:Function CalculateMark(theText As String) As Single
Dim Arr As Variant, i As Long, SumVal As Single, xCounter As Long
' Tach chuoi dau vao thanh mang
Arr = Split(theText, ",")
' Duyet qua mang
For i = 0 To UBound(Arr)
' Kiem tra xem du lieu co gia tri khong, neu co thi tinh tong va dem
If Val(Arr(i)) > 0 Then
SumVal = SumVal + Val(Arr(i))
xCounter = xCounter + 1
End If
Next
If xCounter > 0 Then
' Chi thuc hien phep chia khi co so lieu
CalculateMark = SumVal / xCounter
End If
End Function
Mã PHP:SELECT a.MSHS, CalculateMark(a.M1 & "," & a.M2 & "," & a.[15P1] & "," & a.[15P2] & "," & a.[15P3] & "," & a.[15P4] & "," & a.T1 & "," & a.T2 & "," & a.T3 & "," & a.T4 & "," & a.T5) AS Diemtrungbinh
FROM [T-DIEM] AS a;