chipiu3001
Thành viên hoạt động



- Tham gia
- 22/8/15
- Bài viết
- 105
- Được thích
- 15
Bạn thử coi coi có đúng chưa nha.Chào ace,
Mình có bảng dữ liệu như hình A
Ace giúp mình câu lệnh truy vấn SQL để ra kết quả như hình B.
Truy vấn theo dữ liệu đầu vào chỉ có Tên="B", nếu trong B có B1 thì sẽ lấy luôn dữ liệu của B1.
Mình cảm ơn nhiều.
View attachment 298899View attachment 298900
Sub TruyVan()
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;IMEX=1"""
Sheet2.Range("A2").CopyFromRecordset .Execute("Select * From [Sheet1$] Where Ten Like 'B%'")
End With
End Sub
Việc bố trí dữ liệu hơi kỳ kỳ rồi. Text và Number không nên lẫn vào nhau như thế.Chào ace,
Mình có bảng dữ liệu như hình A
Ace giúp mình câu lệnh truy vấn SQL để ra kết quả như hình B.
Truy vấn theo dữ liệu đầu vào chỉ có Tên="B", nếu trong B có B1 thì sẽ lấy luôn dữ liệu của B1.
Mình cảm ơn nhiều.
View attachment 298899View attachment 298900
Gửi bạn. cái đó chỉ là ví dụ thôi. Điền dữ liệu bất kỳ.Việc bố trí dữ liệu hơi kỳ kỳ rồi. Text và Number không nên lẫn vào nhau như thế.
Bạn giúp mình như nội dung ở #4 nhéBạn thử coi coi có đúng chưa nha.
Tái bút: Không file giả lập dữ liệu nên tui làm đại, còn lại bạn tự biến tấu nha hôn.Mã:Sub TruyVan() With CreateObject("ADODB.Connection") .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;IMEX=1""" Sheet2.Range("A2").CopyFromRecordset .Execute("Select * From [Sheet1$] Where Ten Like 'B%'") End With End Sub
Gửi bạn. Đã làm được.Bạn theo logic này:
select *
from bang
where mahang = 'A'
or mahang in (select nguyenlieu from bang where mahang = 'A')
select * from bang where mahang = 'A'Gửi bạn. Đã làm được.
Cảm ơn bạn nhiều
mình nghĩ nó phải chạy như nhau chứ nhỉ? bạn phải kiểm tra xem lúc bạn chạy thì server có chạy những cái khác không nữa, hoặc bạn thử cho bộ optimise nó so sánh 2 câu lệnh xem thế nào.Gửi bạn. Đã làm được.
Cảm ơn bạn nhiều
Bài đã được tự động gộp:
select * from bang where mahang = 'A'
union all
select * from bang where mahang in (select nguyenlieu from bang where mahang = 'A')
Mình thấy câu lệnh này chạy nhanh hơn.
Mình viết sai cấu trúc nên nó không chạy. Theo như gợi ý của bạn thì mình làm nó chạy được rồi.
Cảm ơn nhé
Khác nhau bạn ạ. Dữ liệu của mình cả triệu dòng.mình nghĩ nó phải chạy như nhau chứ nhỉ? bạn phải kiểm tra xem lúc bạn chạy thì server có chạy những cái khác không nữa, hoặc bạn thử cho bộ optimise nó so sánh 2 câu lệnh xem thế nào.
Bạn có thể chụp execution plan của cả 2 câu lệnh được không? cái này có thể do nó dùng plan khác nhau.Khác nhau bạn ạ. Dữ liệu của mình cả triệu dòng.
Chạy 2 lệnh thì cảm nhận rõ bằng mắt chênh nhau khá lớn.
Mình ko dùng lệnh đo.
Bài đã được tự động gộp:
Mình có so sánh thời gian giữa 2 câu lệnh đây bạn. Union all nhanh hơn 20 lần.
View attachment 298904View attachment 298905