Lỗi câu lệnh SQL? Không hiểu, mong các bạn giúp đỡ (1 người xem)

Liên hệ QC

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

manhhung12

Thành viên thường trực
Tham gia
20/3/08
Bài viết
232
Được thích
88
Chà sau mấy ngày nâng cấp, hôm nay bộ mặt của diễcnn đàn nhìn mà dễ thương thế. cảm ơn BQT 4R đã cho các Member được vui vẻ cùng diễn mão mới của 4R.
Sau đay tôi có 1 câu hỏi mong các thành viên giúp đỡ:
1/ Trên Fr Chcong có nút Print, mục đích củ nút là kết xuất ra report nhờ câu lệnh SQL, Sau khi tôi thử trên 1 sheet thì không sao nhưng khi liên kết trên 2 sheet thì bi lỗi.
Các bạn chay thử CT và xem báo lỗi, và cho tôi sự giúp đỡ.
(Nhấn nút chấm công -> chọn nhân viên (enter) và tháng (nhập tháng 1-vì DL tôi mới nhập cho tháng 1 và nhấn Enter) sau đó nhấn nút Yes -> form chamcong -> nhấn nút Print -> báo lỗi)
Tôi gửi kèm file cho các bạn xem và giúp đỡ (Chỉ ra nguyên nhân lỗi và cách khắc phục)
2/Với câu lênh đó tôi muốn thêm mệnh đề:
- Order by ascending/de-ascending.
- Group by
...
 
Lần chỉnh sửa cuối:
Cho hỏi: a và b, là table định nghĩa trong sheet hay trong code? code nào?
Xin thông cảm, tôi tìm mờ mắt mà không thấy.
 
Upvote 0
Cho hỏi: a và b, là table định nghĩa trong sheet hay trong code? code nào?
Xin thông cảm, tôi tìm mờ mắt mà không thấy.
A va b la ky tu dai dien cho sheet khai bao trong mệnh đề From shName ->a, Dstv -> b
Nếu câu lệnh tôi viết là:
HTML:
        Call Table_Query("qrBaocao", ThisWorkbook.Sheets("BAOCAO"), "A5", "ODBC", ThisWorkbook.Path & _
        "\" & ThisWorkbook.Name, "Select a.Ngay, a.Tugio, a.dengio, a.noidung From `" & shName & "$`  a  Where right(a.Ngay,2) = '01'")
thì không báo lỗi và chạy đúng nhưng thêm vao2 1 bảng nữa thì nó báo lỗi (tham chiếu từ 2 bảng)
Bạn thử chạy bằng dòng code tôi đã đánh dấu bên trên thì biết kết quả
 
Lần chỉnh sửa cuối:
Upvote 0
Cả câu lệnh trên (đã đánh dấu, nay bỏ đánh dấu để chạy) cũng bị báo lỗi theo cái Msgbox trong module1. Nếu đánh dấu cái Msgbox để không hiện thông báo thì không hiện kết quả gì cả.
Tuy nhiên theo tôi hiểu thì:

- nếu 2 điều kiện lọc thì phải là And : (thí dụ trong file trên bạn dùng dấu phẩy):
Mã:
Where a.Hoten = b.MaNv [COLOR=red][B]and[/B][/COLOR] right(a.Ngay,2) = '01'

- Nếu muốn Group by thì thêm vào sau câu Where, nhưng phải có ít nhất 1 trường sum, hoặc count, hoặc min, max:
GROUP BY b.HoTen, a.xyz

- nếu muốn sort thì thêm vào sau câu GROUP BY:
ORDER BY b.Ngay (nếu sort Ascending)
ORDER BY b.Ngay DESC (nếu sort Descending, không phải de-ascending nhé)
 
Upvote 0
Cả câu lệnh trên (đã đánh dấu, nay bỏ đánh dấu để chạy) cũng bị báo lỗi theo cái Msgbox trong module1. Nếu đánh dấu cái Msgbox để không hiện thông báo thì không hiện kết quả gì cả.
Tuy nhiên theo tôi hiểu thì:

- nếu 2 điều kiện lọc thì phải là And : (thí dụ trong file trên bạn dùng dấu phẩy):
Mã:
Where a.Hoten = b.MaNv [COLOR=red][B]and[/B][/COLOR] right(a.Ngay,2) = '01'
- Nếu muốn Group by thì thêm vào sau câu Where, nhưng phải có ít nhất 1 trường sum, hoặc count, hoặc min, max:
GROUP BY b.HoTen, a.xyz

- nếu muốn sort thì thêm vào sau câu GROUP BY:
ORDER BY b.Ngay (nếu sort Ascending)
ORDER BY b.Ngay DESC (nếu sort Descending, không phải de-ascending nhé)
Đúng là tôi đã quên toán tử and. Ngớ ngẩn quá.
Tôi viết de-ácenndiinngg là do tôi quên tham sô Desc nên viết vậy.
Câu lệnh đã chạy ngon sau khi thêm and vào giữa 2 điều kiện.
SQL tuyệt vời vì với nó tgian xử lý trích lọc/sắp xếp dữ liệu cực nhanh.
 
Upvote 0
Bạn PTM cho hỏi và giúp đỡ thêm/ SQL trên Excel thật khó hiểu

Lỗi này là như thế nào?
Bạn xem file gửi kèm
 
Lần chỉnh sửa cuối:
Upvote 0
Order By phải nằm sau Group By. Bạn xem lại bài 4 mình cũng ghi như vậy.
Ngoài ra Group By phải liệt kê tất cả các trường không sum, count, Min, max,..
 
Upvote 0
Tại sao phải liệt kê đầy đủu field sau group by

Order By phải nằm sau Group By. Bạn xem lại bài 4 mình cũng ghi như vậy.
Ngoài ra Group By phải liệt kê tất cả các trường không sum, count, Min, max,..
Tại sao phải liệt kê đầy đủ các trường nhỉ? Nếu tôi chỉ group by theo 1 số lượng ký tự (nhóm) trong 1 trường thì làm sao bạn?
Ví dụ trường Ngay của tôi có cấu trúc như sau: Ngay01Ca01/Ngay01Ca02/Ngay01Ca03...
Ngay02Ca01/Ngay02Ca02/Ngay02Ca03....
....
Thì tôi phải viết như thế nào trong mệnh đề Group by ?
Bạn giúp đỡ nhé
 
Upvote 0
1. Trường đây là trường của Query, không phải trường của table gốc. Số lượng trướng của Query có thể ít hơn, bằng, hoặc nhiều hơn số lượng trường của table.
Vậy Query có bao nhiêu trường, trừ đi số trường sum, count, ..., còn bao nhiêu liệt kê hết trong group by.
2. Nếu trường của Query là right(a.ngay,2) thì group by right(a.ngay,2)

Về Group by và Order By bạn có thể tham khảo SQL trong Access hoặc môi trường khác mà bạn biết. Excel chỉ khác chỗ khi gọi table có thêm tên file, tên sheet, trước tên (name) của table. Với lại khi làm trong Excel bạn có thể xem cấu trúc câu SQL bằng cách thử trong data - import external data - new database query
 
Upvote 0
1. Trường đây là trường của Query, không phải trường của table gốc. Số lượng trướng của Query có thể ít hơn, bằng, hoặc nhiều hơn số lượng trường của table.
Vậy Query có bao nhiêu trường, trừ đi số trường sum, count, ..., còn bao nhiêu liệt kê hết trong group by.
2. Nếu trường của Query là right(a.ngay,2) thì group by right(a.ngay,2)

Về Group by và Order By bạn có thể tham khảo SQL trong Access hoặc môi trường khác mà bạn biết. Excel chỉ khác chỗ khi gọi table có thêm tên file, tên sheet, trước tên (name) của table. Với lại khi làm trong Excel bạn có thể xem cấu trúc câu SQL bằng cách thử trong data - import external data - new database query
--------
À, tôi đã hiểu, bây giờ tôi có muốn nối bảng chi tiết vói bảng đã sum theo nhóm(nối hai query table) thì tôi viết thế nào cho đúng? Ví dụ tôi viết:
HTML:
(.... "Select left(a.Ngay,6) as '  Ngay  LV  ', sum(a.Tugio) as ' Tu gio ', sum(a.dengio) as ' Den gio ', b.TenNv  From `" & shName & "$`  a, `" & shDs & "$`  b Where a.Hoten = b.MaNv  group by left(a.ngay,6),b.tennv" inner joint "Select left(a.Ngay,6) as '  Ngay  LV  ', sum(a.Tugio) as ' Tu gio ', sum(a.dengio) as ' Den gio ', b.TenNv  From `" & shName & "$`  a, `" & shDs & "$`  b Where a.Hoten = b.MaNv  group by left(a.ngay,6),b.tennv")
có đúng không bạn???
 
Lần chỉnh sửa cuối:
Upvote 0
Trong MS Access và Excel, dù mặc định tất cả field là group by, nhưng khi có ít nhất 1 trường tính sum, max, ... vẫn phải liệt kê những trường còn lại là group by. Thuật ngữ group by không đồng nghĩa chính xác với group mà ta hiểu theo nghĩa thông thường.
Thí dụ ta muốn tính tổng truờng stien, group theo Soctu, nếu kèm theo Soctu ta muốn thể hiện nội dung của chứng từ, thì add thêm trường noidung. Trường nội dung đó vẫn phải khai báo group by. Vậy câu sau đúng:
Group by left(ngay,3),Ngay,fld1,fld3,fld4

Hạn chế của nó là giả sử chứng từ có 3 mục, trong đó 2 mục nội dung giống nhau, mục thứ 3 khác 1 dấu phẩy chẳng hạn, Query sẽ tách ra 2 dòng, mỗi dòng cho 1 nội dung.
Thêm trường thứ 3, thứ tư cũng vậy.
Bạn thử access xem, dễ hơn Excel.
 
Upvote 0
Trong MS Access và Excel, dù mặc định tất cả field là group by, nhưng khi có ít nhất 1 trường tính sum, max, ... vẫn phải liệt kê những trường còn lại là group by. Thuật ngữ group by không đồng nghĩa chính xác với group mà ta hiểu theo nghĩa thông thường.
Thí dụ ta muốn tính tổng truờng stien, group theo Soctu, nếu kèm theo Soctu ta muốn thể hiện nội dung của chứng từ, thì add thêm trường noidung. Trường nội dung đó vẫn phải khai báo group by. Vậy câu sau đúng:
Group by left(ngay,3),Ngay,fld1,fld3,fld4

Hạn chế của nó là giả sử chứng từ có 3 mục, trong đó 2 mục nội dung giống nhau, mục thứ 3 khác 1 dấu phẩy chẳng hạn, Query sẽ tách ra 2 dòng, mỗi dòng cho 1 nội dung.
Thêm trường thứ 3, thứ tư cũng vậy.
Bạn thử access xem, dễ hơn Excel.
Phần Bạn xem câu lệnh SQL tôi viết ở trên để joint 2 table-query có đúng không nhé.
Đây là câu lệnh tạo 1 bảng tổng hợp có dòng cộng nhóm và các chi tiết trong nhóm/và có thể là tổng tất cả nếu Joint với 1 table-query tổng (chẳng hạn).
 
Upvote 0
Mình thấy ý kiến các bạn có điểm không chính xác:
Trong SQL nếu đã khai báo mệnh đề group by theo 1 field nào đó thì không thể khai báo 1 group by khác không chủ ý tránh những trường hợp không đồng nhất của các field không chủ ý sẽ tạo ra các nhóm không theo ý muốn.
Ngoài các field chủ ý Group by các field khác đều phải áp dụng công thức, các field ký tự dùng firt,last,count, field so dùng sum .Vậy làm sao khai tên field được trong SQL sử dụng Group by.
Để đơn giản cách viết bạn Import sheet vào Access rồi dùng trình thiết lập Query của Access lập Query sau đó chép lấy câu lệnh SQL để tham khảo.
 
Upvote 0
Mình thấy ý kiến các bạn có điểm không chính xác:
Trong SQL nếu đã khai báo mệnh đề group by theo 1 field nào đó thì không thể khai báo 1 group by khác không chủ ý tránh những trường hợp không đồng nhất của các field không chủ ý sẽ tạo ra các nhóm không theo ý muốn.
Ngoài các field chủ ý Group by các field khác đều phải áp dụng công thức, các field ký tự dùng firt,last,count, field so dùng sum .Vậy làm sao khai tên field được trong SQL sử dụng Group by.
Để đơn giản cách viết bạn Import sheet vào Access rồi dùng trình thiết lập Query của Access lập Query sau đó chép lấy câu lệnh SQL để tham khảo.
Bạn nói khó hiểu thế."chủ ý" nghĩa là sao vậy?? Đúng như PTM nói. Sau group by phải liệt kê tất cả các trường không sum/sount/min/max và đẻ có kết quả mong muốn thì không truy vấn trên các trường không phải là số mà giá trị của nó không đồng nhất (ví dụ trường tên)
 
Upvote 0
Gởi bạn Sealand,

Xin thưa với bạn rằng Những bài tôi viết trên đều đã thực hành trên máy trước khi post lên:
Nếu có 5 field, trong đó 1 field có tính toán sum, count, max, ... Mà chỉ khai báo group by 1 trường, cả Excel và Access đều báo lỗi:
You tried to execute a query that does not included the specified expression <field name> as part of an agreegate function.
Chỉ khi khai báo Group by đủ 4 trường còn lại mới hết lỗi.

Thứ 2: Ban Manh Hung đang hỏi trong Excel, thì phải tuân thủ cấu trúc SQL của Excel, tôi đã đề nghị bạn ấy thực hành query bằng wizard để xem cấu trúc SQL. Nếu bạn cũng thực hành trên Excel và Access thì cũng sẽ thấy .

Thứ 3: tôi cũng có nói nếu 1 field nào đó không đồng nhất dù chỉ 1 dấu phẩy, kết quả cũng sẽ không như ý muốn. Nay tôi nhấn mạnh đó là lỗi nhập liệu, không phải lỗi Query. Trường nào không đáp ứng tính đồng nhất (thí dụ trường đơn giá trong bảng kê nhập hàng) thì không đưa vào. Đưa vào là Excel và cả Access đều tự động khai báo group by, sai ráng chịu.

To Manh Hung: Kể cả trường số không đồng nhất luôn.
 
Lần chỉnh sửa cuối:
Upvote 0
To PTM và Manhhung:
Các bạn đều không hiểu ý mình rồi. Mình không nói là các bạn không đúng về cú pháp mà nó có vấn đề kết quả. Ví dụ Table có 3field cần đưa vào kết quả là Soct, noidung, sotien
chi tiết như sau:

PC00234 Chi mua hàng 120.000
PC00234 Thuế VAT 12.000


Chủ ý của ta là cộng tiền theo tùng chứng từ, kết quả phải là:

PC00234 Chi mua hàng 132.000

Như vậy, đương nhiên là sum(sotien)group by Soct rồi. Nhưng nếu Group by noidung nữa thì kết quả lại cho 2 dòng chứ không phải 1 dòng như chủ ý
 
Upvote 0
Gởi bạn Sealand,

To Manh Hung: Kể cả trường số không đồng nhất luôn.
Trường số không đồng nhất là khác kiểu dữ liệu phải không bạn? Tôi chưa thử.
Bạn cho tôi hỏi thêm:
Tôi làm hai câu query riêng biệt cho kết xuất ra 2 table_query
1/Tổng hơp (qrTH)
2/Chi tiết(qrCT)
Sau đó thì không biết nối table_query này lai vói nhau và sort trên mã như thế nào? để được 1 table Báo cáo gồm các bản ghi cộng theo nhóm và các bản ghi chi tiết của từng nhóm.
Bạn giúp đỡ thêm
 
Upvote 0
Trường số không đồng nhất là khác kiểu dữ liệu phải không bạn? Tôi chưa thử.
Thí dụ như bạn tính tổng tiền của 1 phiếu nhập kho nhiều mặt hàng, group theo số phiếu nhập, thì trường đơn giá, trường số lượng là trường số không đồng nhất.
Bạn có thể cho 1 file thí dụ đã kết xuất 2 Query lên sheet rồi không? Kèm theo là 1 bảng kết quả mong muốn.
Sorry vì mấy file chạy code của bạn tôi chưa bao giờ chạy code được. Máy tôi nó thiếu cái gì đó. Mấy bữa nay toàn thử bằng file khác hoặc thử bằng MS Query wizard. Thực sự tôi chưa hề thử trường hợp lấy query này làm nguồn cho query khác trên Excel. Access thì khác, thoải mái lắm.
 
Upvote 0
Đây bạn. Tôi kết xuất trên 1 sheet: Baocao : Quyery 1 bắt đầu từ ô A5/ quyery 2 bắt đầu từ F5.
Thực ra nếu kết xuất trên 2 sheet khác nhau thì sau đó lai kết xuất thêm 1 lần nữa chắc là được nhưng tôi thấy cách này hơi kỳ kỳ.
 

File đính kèm

Upvote 0
Bạn không kèm theo bảng kết quả mong muốn, nên khó làm theo đúng ý bạn được. Tuy nhiên phương pháp như sau:
- Đặt name cho vùng chứa Query 1 và Query 2, hoặc đặt tên cho bản thân query bằng code trong VBA sau khi tạo.
- Tạo query mới từ 2 name mới đặt.

Dù vậy, 2 query có sẵn trong file của bạn khi tạo query mới chả có ý nghĩa gì, bỏi bản thân của chúng: 1 cái là tổng hợp, 1 cái là chi tiết của cùng 1 nội dung.
Bạn xem file sẽ thấy.

Ngoài ra tôi cũng tạo 1 file khác, với dữ liệu mẫu. Trong sheet CDPS tôi tạo lần lượt 3 query riêng biệt (bạn xem trong name):
- cái thứ nhất từ A đến D: số dư đầu kỳ
- cái thứ 2 từ E đến F: phát sinh nợ trong kỳ (dùng sum và group by)
- cái thứ 3 từ G đến H: phát sinh có trong kỳ (dùng sum và group by)

Rồi tôi tạo query thứ tư từ J đến O, tổng hợp 3 cái kia lại, với outer joint. nghĩa là lấy nguồn là 3 cái kia theo name. Name này là Excel tự đặt nên dài, bạn có thể đặt tên lại. Tuy nhiên vì bạn dùng code, nếu mỗi query là 1 sheet, bạn lấy ngay tên sheet thêm dấu $ làm tên query. Hay là bạn thử "tensheet!$A:$E" làm table nguồn xem nó chịu không.

Muốn xem cấu trúc SQL của cái nào thì để ô chọn trong vùng đó, nhấn nút Edit Query trong thanh công cụ External Data.
 

File đính kèm

Upvote 0
Bạn không kèm theo bảng kết quả mong muốn, nên khó làm theo đúng ý bạn được. Tuy nhiên phương pháp như sau:
- Đặt name cho vùng chứa Query 1 và Query 2, hoặc đặt tên cho bản thân query bằng code trong VBA sau khi tạo.
- Tạo query mới từ 2 name mới đặt.

Dù vậy, 2 query có sẵn trong file của bạn khi tạo query mới chả có ý nghĩa gì, bỏi bản thân của chúng: 1 cái là tổng hợp, 1 cái là chi tiết của cùng 1 nội dung.
Bạn xem file sẽ thấy.

Ngoài ra tôi cũng tạo 1 file khác, với dữ liệu mẫu. Trong sheet CDPS tôi tạo lần lượt 3 query riêng biệt (bạn xem trong name):
- cái thứ nhất từ A đến D: số dư đầu kỳ
- cái thứ 2 từ E đến F: phát sinh nợ trong kỳ (dùng sum và group by)
- cái thứ 3 từ G đến H: phát sinh có trong kỳ (dùng sum và group by)

Rồi tôi tạo query thứ tư từ J đến O, tổng hợp 3 cái kia lại, với outer joint. nghĩa là lấy nguồn là 3 cái kia theo name. Name này là Excel tự đặt nên dài, bạn có thể đặt tên lại. Tuy nhiên vì bạn dùng code, nếu mỗi query là 1 sheet, bạn lấy ngay tên sheet thêm dấu $ làm tên query. Hay là bạn thử "tensheet!$A:$E" làm table nguồn xem nó chịu không.

Muốn xem cấu trúc SQL của cái nào thì để ô chọn trong vùng đó, nhấn nút Edit Query trong thanh công cụ External Data.
Ồ Tôi đã xuất kết quả trong sheet baocao rồi mà:
query 1: bắt đầu từ ô a5 và query 2 bắt dầu từ ô f5. Bây giờ tôi muốn nối 2 query này lại thành 1vớii kết quả là có dòng tổng nhóm Ngay1 và chi tiết của ngay1, tiếp theo là tổng nhóm ngay2 với chi tiết của ngày 2:
Ngay01............8......32......Nguyễn hồng Hải
Ngay01Ca01......4......16......Nguyễn hồng Hải
Ngay01Ca02......4......16......Nguyễn hồng Hải
Ngay02..........12........8......Nguyễnhồng Hải
Ngay02Ca01......8........4......Nguyễnhồng Hải
Ngay02Ca02......4........4......Nguyễn hồng Hải
.....
Vậy đó bạn à. Tôi đã dùng thử phép toán nối union giữa 1 câu lệnh select nhưng không được vì trong excel thì SQL hơi khó chịu và tôi không hiểu.
Bạn chay file tôi gửi trên máy bạn không được sao?
 
Lần chỉnh sửa cuối:
Upvote 0
Code không chay được, nhưng tôi disable macro để xem và đã thấy 2 query đó, và đã tạo query mới ở dưới. Nhưng query mới đó theo như bài 21 là sai rồi.
File của tôi cũng tạo query cùng loại nên cũng chưa đúng ý.
Union tôi chưa nghiên cứu tới.
Trong Access tôi phải đưa vào report, group trong report, với group header và group footer, mới ra cấu trúc đó.
Để tôi với bạn có thể cùng nghiên cứu, bạn hãy cho tôi: (không cần file)
- câu lệnh SQL query thứ nhất
- câu lệnh SQL query thứ hai
- Câu lệnh SQL có cấu trúc Union dựa trên 2 query trên.

Dùng dữ liệu cũ để cho kết quả như bài trên.

Tất cả bằng cấu trúc của môi trường không phải Excel, của Access càng tốt, tôi sẽ thử chuyển sang Excel.
 
Upvote 0
Đây bạn:
1/ Câu lệnh tạo query tổng nhóm theo 6 ký tự đầu của trường ngày
select left(a.Ngay,6) & "0000" as Ngay_lv, sum(a.tugio) as Tu_gio ,sum(a.dengio) as Den_gio, b.Tennv from NHH0101 a, DSTV b where a.HoTen=b.Manv group by left(a.Ngay,6),b.Tennv order by a.Ngay
Lưu ý: Phần tô đỏ là khi viết SQL trên VB phải thêm 4 số 0 ở sau 6 ký tự đầu của trường ngày và cuối cùng có 10 ký tự có dạng Ngay010000,Ngay020000,.... đẻ thuận tiện cho sắp xếp
2/ Câu 2 là liệt kê chi tiết:
select a.Ngay as Ngay_lv, a.tugio as Tu_gio,a.dengio as Den_gio, b.Tennv from NHH0101 a order by a.Ngay
3/ Union
select left(a.Ngay,6) & "0000" as Ngay_lv, sum(a.tugio) as Tu_gio ,sum(a.dengio) as Den_gio, b.Tennv from NHH0101 a, DSTV b where a.HoTen=b.Manv group by left(a.Ngay,6),b.Tennv order by a.Ngay
union
select a.Ngay as Ngay_lv, a.tugio as Tu_gio,a.dengio as Den_gio, b.Tennv from NHH0101 a order by a.Ngay
Tôi vẫn phân vân về mệnh đề group by. Nếu bạn tìm trên mạng về SQL và xem ví dụ nó không bắt liệt kê tất cả các trường sau mệnh đề này. Nó hiểu sau group by là 1 biểu thức điều kiện cho các hàm sum/count...
Chẳng hạn câu lệnh select lồng nhau thì câu lệnh select trong mệnh đề where là 1 biểu thức điều kiện.
Nói vậy thôi, bạn rành về SQL hơn tôi nên có gì không phải đừng giận nhé.
Thân.

Mỹ đâu rồi? Sao từ lâu kg hồi âm? Dẫ giai quyết xong vấn đề chúng ta bàn chưa
 
Upvote 0
Tôi vẫn phân vân về mệnh đề group by. Nếu bạn tìm trên mạng về SQL và xem ví dụ nó không bắt liệt kê tất cả các trường sau mệnh đề này. Nó hiểu sau group by là 1 biểu thức điều kiện cho các hàm sum/count...
Chẳng hạn câu lệnh select lồng nhau thì câu lệnh select trong mệnh đề where là 1 biểu thức điều kiện.

GROUP BY được dùng khi trong SELECT sử dụng các hàm thống kê như ;SUM, COUNT, AVR,...Khi đó, các cột cần được nhóm lại thì phải được đặt sau mênh đề GROUP BY. Nếu có điều kiện mà phải dùng tới những cột/field mà nằm trong GROUP BY thì phải dùng điều kiện sau mệnh đề HAVING .

Bạn sử dụng A-Tools hoặc một cộngcu SQL (Script) Builder sẽ học được nhiều về SQL vì nó tạo cho bạn câu lệnh SQL không chỉ cho Access mà cho các loại CSDL.
 
Upvote 0
GROUP BY được dùng khi trong SELECT sử dụng các hàm thống kê như ;SUM, COUNT, AVR,...Khi đó, các cột cần được nhóm lại thì phải được đặt sau mênh đề GROUP BY. Nếu có điều kiện mà phải dùng tới những cột/field mà nằm trong GROUP BY thì phải dùng điều kiện sau mệnh đề HAVING .

Bạn sử dụng A-Tools hoặc một cộngcu SQL (Script) Builder sẽ học được nhiều về SQL vì nó tạo cho bạn câu lệnh SQL không chỉ cho Access mà cho các loại CSDL.
Tôi muốn bạn quan tâm và giúp tôi về câu lệnh dùng để gộp kquả 2 truy vấn vào 1 bảng kết quả. Như tôi viết ở bài 21. Tôi cũng đang nghiên cứu thêm ở các công cụ bạn nói nhưng quả thực là nhiều quá nên xem chưa hết được
 
Upvote 0
Tôi muốn bạn quan tâm và giúp tôi về câu lệnh dùng để gộp kquả 2 truy vấn vào 1 bảng kết quả. Như tôi viết ở bài 21.

Nói rõ yêu cầu ra nhé. Lấy cột chư thế nào, dữ liệu gốc ở đâu?
Hướng làm như bài #21, bạn dùng 2 SQL sau đó UNION là được

SQL1 = "SELECT ngay, SUM(filed1), SUM(filed1) FROM nguon GROUP BY ngay"
SQL2 = "SELECT ngay, filed1, filed1 FROM nguon

SQLTH = SQL1 & " UNION ALL " & SQL1 & " ORDER BY ngay"

Tôi cũng đang nghiên cứu thêm ở các công cụ bạn nói nhưng quả thực là nhiều quá nên xem chưa hết được
Bạn nên tìm và sử dụng các công cụ để hiểu biết nhiều hơn, năng suất cao hơn! Có rất nhiều các công cụ tạo cho bạn câu truy vấn SQL, có rồi bạn paste vào ứng dụng của bạn là xong thôi. Không biết vì sao với bạn tìm và sử dụng một công cụ lại khó đến thế? Thời gian bạn lặn lội với yêu cầu để làm thuần túy trên một công cụ của Excel thì bạn đã học được gấp 10 lần nếu với những công cụ khác!
 
Upvote 0
Nói rõ yêu cầu ra nhé. Lấy cột chư thế nào, dữ liệu gốc ở đâu?
Hướng làm như bài #21, bạn dùng 2 SQL sau đó UNION là được

SQL1 = "SELECT ngay, SUM(filed1), SUM(filed1) FROM nguon GROUP BY ngay"
SQL2 = "SELECT ngay, filed1, filed1 FROM nguon

SQLTH = SQL1 & " UNION ALL " & SQL1 & " ORDER BY ngay"

Bạn nên tìm và sử dụng các công cụ để hiểu biết nhiều hơn, năng suất cao hơn! Có rất nhiều các công cụ tạo cho bạn câu truy vấn SQL, có rồi bạn paste vào ứng dụng của bạn là xong thôi. Không biết vì sao với bạn tìm và sử dụng một công cụ lại khó đến thế? Thời gian bạn lặn lội với yêu cầu để làm thuần túy trên một công cụ của Excel thì bạn đã học được gấp 10 lần nếu với những công cụ khác!
Bài 23 là các câu SQL tôi muốn nối kết quả. Vì tôi đang làm SQL trong excel nên muốn các bạn giúp đỡ. Cũng biết rằng việc nghiên cứu và sử dụng công cụ đẻ nghiên cứu các vấn đề mình làm thì cũng là 1 kênh để học tập, còn trao đổi trên diễn đàn cũng là 1 kênh. Tuy nhiên do mục đích tham gia diễn đàn để học hỏi nhau, để trao đổi với nhau và các bài viết trên này là mọi người đều đọc được vậy nên tôi mới theo dõi topic này lâu như vậy(cho đến nay đã có khoảng 30 bài). Bạn thông cảm và hiểu cho.
 
Upvote 0

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

Back
Top Bottom