Lệnh sum Table khác bằng SQL
Table1
Ma
|
Hoten
|
diachi
|
A|Nguyễn Văn A|P5|
B|Nguyễn Văn B|P6|
C|Nguyễn Văn C|P7|Table2
Ma
|
TenTS
|
thanhtien
|
A|mực|10,000
|
A|bút|30,000
|
A|giấy|50,000
|
A|đồ bấm|90,000
|
C|kim kẹp|2,500
|
C|ghi chú|12,500
|
C|thước|1,000
|
C|tập|5,000
|
C|giấy màu|20,000
|
Em muốn dùng câu lệnh SQL để hiển thị các Files bên Table1 và sum Fiels cột thành tiền bên Table2 thì Câu lệnh như thế nào?. mò hoài mà không ra.
Kết quả mà em muốn hiển thị
Ma
|
Hoten
|
diachi
|
thành tiền
|
A|Nguyễn Văn A|P5|180,000
|
B|Nguyễn Văn B|P6|0
|
C|Nguyễn Văn C|P7|41,000
|
Cám ơn các anh chị hướng dẫn.
Select Table1.Ma, Table1.Hoten, Table1.Diachi, Sum(Table2.thanhtien) As Sotien
From Table1 Left Join Table2 On Table1.Ma = Table2.Ma
GroupBy Table1.Ma, Table1.Hoten, Table1.Diachi;
Sao nó không kết nối được vậy anh. em dang lam trong Vb6
Vậy phải xem đoạn code của bạn như thế nào, nếu có file càng tốt.
Đoạn SQL của Thầy Mỹ 100% rồi đấy.
Public Function ConnectRS(ByRef vDB As ADODB.Connection, ByRef vRS As ADODB.Recordset, sSQL As String, Optional sHowMSG As Boolean = True, Optional ByRef iErrNumber As Variant, Optional ByRef sErrDescription As Variant) As Boolean
On Error GoTo errH
Set vRS = Nothing
Set vRS = New ADODB.RecordsetvRS.Open sSQL, vDB, adOpenStatic, adLockOptimistic
ConnectRS = TrueExit Function
'——————————————-
errH:
ConnectRS = False
End FunctionDim MySet As ADODB.Recordset
Dim sSQL As String
Dim i As Long
With LyGrid1
.Clear
sSQL = "Select DMHS.MaHS,DMHS.HoVaTen,DMHS.Ghichu, Sum(Data.ThanhTien) As Sotien" & _
"From DMHS Left Join Data On DMHS.MaHS = Data.MaHS" & _
"GroupBy DMHS.MaHS,DMHS.HoVaTen,DMHS.Ghichu"If ConnectRS(PrimeDB, MySet, sSQL) = False Then
MsgBox "Sai"
GoTo Exitsub
End IfFor i = 1 To MySet.RecordCount
.AddItem (MySet.Fields("MaCT") _
& vbTab & MySet.Fields("HoVaTen") _
& vbTab & MySet.Fields("Ghichu") _
& vbTab & MySet.Fields("Sotien"))
MySet.MoveNext
Next i
MySet.Close
Exitsub:
.Refresh
.Redraw = True
End With
Vấn đề của bạn là copy SQL từ Query Access sang VB6.0 chưa chỉnh những chổ cuối dòng khi xuống dòng 1 câu lệnh. Bạn thử cho 1 cách trắng vào cuối những đoạn xuống dòng đó là được.
[COLOR=#000000][COLOR=#0000BB] [COLOR=black] sSQL [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"Select DMHS.MaHS,DMHS.HoVaTen,DMHS.Ghichu, Sum(Data.ThanhTien) As Sotien " [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]_
[/COLOR][COLOR=#DD0000]"From DMHS Left Join Data On DMHS.MaHS = Data.MaHS " [/COLOR][COLOR=#007700]& [/COLOR][COLOR=#0000BB]_
[/COLOR][COLOR=#DD0000]"GroupBy DMHS.MaHS,DMHS.HoVaTen,DMHS.Ghichu"[/COLOR][/COLOR][/COLOR][COLOR=black][/COLOR]
Em không hiểu sao nếu sum trên 1 Table thì không sao, nhưng khi đánh sum trên 2 bảng thì không có dữ liệu nào hiện ra
Tốt nhất là thêm Chr(10) vào mỗi chỗ xuống dòng.
Em kiem tra rất kỹ các khoản trắng rồi mà sao nó cũng không kết nối được ?
sSQL = "Select DMHS.MaHS, DMHS.HoVaTen, DMHS.Ghichu, Sum(Data.ThanhTien) As Sotien" & _
" From DMHS Left Join Data On DMHS.MaHS = Data.MaHS" & _
" GroupBy DMHS.MaHS, DMHS.HoVaTen, DMHS.Ghichu"
Khoảng trắng cuối đó bạn, bạn chưa chỉnh mà
sSQL = "Select DMHS.MaHS, DMHS.HoVaTen, DMHS.Ghichu, Sum(Data.ThanhTien) As Sotien[B][COLOR=red] _____[/COLOR][/B]" & _
" From DMHS Left Join Data On DMHS.MaHS = Data.MaHS[COLOR=red][B]_________[/B][/COLOR]" & _
" GroupBy DMHS.MaHS, DMHS.HoVaTen, DMHS.Ghichu"
Trời em phát hiện ra rồi lỗi này rồi là do em đánh sai
Cám ơn anh
ptm0412và anh
domfootwearCám ơn rất nhiều.
Bạn có thể gửi 1 ví dụ giả lập để test thử xem sao nhé.
Nhân tiện cho em hỏi INNER JOIN khác Left Join chỗ nào vậy các anh
Left join nó sẽ thể hiện tất cả các các dòng có trong bảng với bảng cần tham chiếu => các dòng trong bảng cần tham chiếu = null cũng thể hiện.
Ngược lại inner join chỉ thể hiện những dòng bảng tham chiếu có dữ liệu.
Anh domfootwear cho em hỏi thêm cái này nữa.
Em có tham khảo máy chương trình. có cái thì khi vừa khởi động là nó mở kết nối đến khi tắt chương trình nó mới tắt kết nối còn có cái thì khi cần nhấn vào nó mới mở kết nối.
Không biết 2 cách này khác nhau không anh.
– Khởi động mở kết nối, khi thoát chương trình đóng kết nối có ưu điểm là khi sử dụng chương trình sẽ chạy nhanh hơn vì không tốn thời gian kết nối, chỉ tốn 1 lần lúc khởi động, tuy nhiên nó cũng sẽ chiếm bộ nhớ tùy thuộc vào dữ liệu lớn hay nhỏ Mình thường sử dụng cách này.
– Bạn tự suy luận nhé.
Có cách nào mà mình dùng 1 lệnh Sum mà láy được 3 tổng trên 1 Table mà theo 3 điều kiện không. Nếu được nhờ các anh hướng dẫn giúp em.
Ma1
|
Ma2
|
Ma3
|
Soluong
|
A1|1
|B1|
1
|
A1|1
|B1|
2
|
A1|1
|B2|
3
|
A2|2
|B1|
4
|
A2|2
|B1|
5
|
A2|2
|B1|
6
|
A3|1
|B1|
7
|
A3|1
|B2|
8
|
A3|1
|B3|
9
|
A3|1
|B3|
9
|
A3|2
|B2|
10
|
A3|2
|B2|
11
|
A3|2
|B3|
12
|
A3|2
|B3|
13
|
A3|2
|B3|
14
|
Kết quả|dk1|dk2|dk3|Ket quan
tong1|A3|1|B1|7
tong2|A3|1|B2|8
tong3|A3|1|B3|18Cám ơn các anh chị quan tâm
www.giaiphapexcel.com/diendan/threads/l%E1%BB%87nh-sum-table-kh%C3%A1c-b%E1%BA%B1ng-sql.49916/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học