Giới hạn số dòng kết quả trả ra của lệnh sql
Dear các ace!
Như tiêu đề cho em hỏi:
1, vấn đề: Câu lệch SQL của em lấy dữ liệu từ 1 bảng tính Excel khác sắp sếp kết quả theo thứ tự giảm dần, và em chỉ cần lấy 10 giá trị đầu (10 dòng dữ liệu có giá trị lớn nhấ), Em đã dung " Select Top 10 …" nhưng vấn đề là nếu các giá trị so sánh bằng nhau thì kết quả trả ra > 10 dòng, ví dụ có 20 mã cùng 1 giá trị nằm trong top 10 thì nó sẽ xuất ra cả 20 dòng
à các ACE cho em hỏi có cách nào để giới hạn chỉ lấy 10 dòng thôi không (SQL trong Excell ạ)Em mới vọc vạch lên có gì sai các bác ném nhẹ tay
Nếu làm như bạn sẽ bỏ sót dữ liệu, hiếm ai làm vậy. Nếu có thể thì phải xét tiếp điều kiện nữa.
Select top 10 thì nó chỉ ra 10 kết quả thui chứ? bạn có nhầm không? Bạn đưa file mẫu lên để mọi người cùng xem và giúp
Tôi đoán là cái kết quả bạn ấy cần là 10 dòng dữ liệu, tuy nhiên cái kết quả trả về hơn 10 dòng vì có dòng giá trị giống nhau
Bạn dùng Distinct nhé
Liệu có sự nhầm lẫn không anh, em kiểm tra lại vẫn thấy nếu select top 10 thì vẫn chỉ trả về 10 kết quả mặc dù có hàng tá giá trị giống nhau.
2744
Bạn đã chưa test kỹ, câu lệnh ở trên của bạn chỉ lấy ra 10 dòng trên cùng của dữ liệu, muốn lấy dữ liệu lớn hàng top thì phải sắp xếp nó lại theo ý muốn.
Anh cho ví dụ cụ thể được không? em vẫn chưa hiểu lắm.
Bạn xem hình bên dưới sẽ hiểu nhé
2745
Vậy cái này khác với SQL Server rồi. Em không check kỹ.
Thử lệnh
"select top 10 f1 from (select f1 from [Sheet1$A1:A30] order by f1 Desc) "
Như nội dung. Khi giá trị cần sắp xếp dòng thứ 11 = dòng thứ 10 thì sẽ ra kết quả nhiều hơn 10 dòng.
Chưa giải quyết được mà bác. Giờ e sẽ test #11.
Trước em giải quyết tạm bằng cách chuyền data qua 1 mảng phụ rồi lấy ra excel. Nhưng nó làm chậm chương trình.
Quan trọng là bạn muốn lấy thế nào thôi, Cụ thể kết quả mong muốn
Nếu chỉ lấy 10 dòng –> sẽ sai tiêu chí top 10, nên SQL lấy đúng tiêu chí thì khác cái như bạn nghĩ thôi.
Nên trên kia đã đề cập là bạn phải thêm điều kiện vào
Xin lỗi các bác vì đã không reply.
Như đã nói ở trên, do đã tìm được phương án tạm nên em sử dụng luôn.
Đến hôm nay xem lại mới thấy nên reply muộn.
Theo cách bài 11 thì giải được bài toán này rồi ạ. Nhưng em thấy bị chậm hơn 1 chút
1607593891sql_1 = " SELECT TOP 2 * FROM (SELECT [" & [Field_Wst3].Value & "] As [F_G]," & Key_Lot_B & " As [Lot_Input], sum( IIF(" & Rate_LRR_B & ">= " & TC_LRR & ", 1, 0) ) As [F_LRR]," _ & "[F_LRR]/[Lot_Input] As [Rate_LRR], " & Check_PCRS_T _ & " As [CheckPCS],sum( IIF(ISNULL([NG_PCS]) " & LoiCD_Khac & Dk_Tenloi & ", 0, [NG_PCS]) ) As [NGQTY], [NGQTY]/" & Check_PCRS_T & " as [RateNG]" _ & " FROM [DATA$]" _ & " " & DK_Date & Chuoi_DK_WST1 _2746
Muốn cho chắc mà không dùng thêm SubQuery thì bạn có thể giới hạn recordset nó nhé. Ví dụ code sau tôi Ví dụ là sẽ giới hạn lấy 10 dòng đầu, mặc kệ kết quả trả về nó là bao nhiêu.
Dữ liệu Sheet1
2749
Sau khi chạy code sau:
Sub SelectTop10_HLMT()
With CreateObject("ADODB.Recordset")
.Open "Select top 10 * from [Sheet1$] order by STT", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
Sheet2.Range("A2").CopyFromRecordset .DataSource
End With
End Sub
Thì tôi được kết quả Sheet2
2748
Kết quả trả về hơn 10 dòng. Vậy tôi sẽ giới hạn kết quả chỉ 10 dòng thì tôi thêm số 10 vào sau .DataSource
Sub SelectTop10_HLMT()
With CreateObject("ADODB.Recordset")
.Open "Select top 10 * from [Sheet1$] order by STT", "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
Sheet2.Range("A2").CopyFromRecordset .DataSource[B][SIZE=6][COLOR=rgb(184, 49, 47)], 10[/COLOR][/SIZE][/B]
End With
End Sub
Tôi chạy code trên và cho ra kết quả như hình bên dưới là 10 dòng dữ liệu như mong đợi mà không cần dùng SubQuery.
2747
www.giaiphapexcel.com/diendan/threads/gi%E1%BB%9Bi-h%E1%BA%A1n-s%E1%BB%91-d%C3%B2ng-k%E1%BA%BFt-qu%E1%BA%A3-tr%E1%BA%A3-ra-c%E1%BB%A7a-l%E1%BB%87nh-sql.134277/
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