2011-02-08 34 views
11

Tôi sẽ sử dụng sql sau để đọc dữ liệu từ excel, nhưng đôi khi tôi cần phải bỏ qua một vài hàng đầu tiên. ví dụ: dữ liệu thực bắt đầu từ dòng 5, vì vậy tôi cần bỏ qua 4 hàng đầu tiên, có thể thực hiện được không?openrowset cho excel: chúng ta có thể bỏ qua một vài hàng không?

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$]'); 

Trả lời

5

này sẽ đánh số các hàng được thu được, không có thứ tự cụ thể (như may mắn sẽ có nó):

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rownum 
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$]') 
) s 
WHERE rownum > 4; 

Bạn có thể muốn xác định một số thứ tự, nếu bạn thấy phù hợp, bằng cách thay đổi rownum định nghĩa như thế này:

ROW_NUMBER() OVER (ORDER BY specific_column_list) AS rownum 
+0

sẽ làm chậm quá trình ETL để thực hiện row_number(). Và tôi không chắc liệu máy chủ sql có thể tải dữ liệu song song hay không, nếu như vậy, sự rownum không thể phản xạ vị trí trong tệp, chẳng hạn như chuỗi 1 tải 100 hàng đầu tiên, luồng 2 tải 100 hàng thứ hai, thì có thể 100 hàng thứ hai được nạp đầu tiên vào cơ sở dữ liệu –

+0

@Daniel Wu: Vậy chúng ta có gì? Với ROW_NUMBER có thứ tự, quá trình này rất có khả năng làm chậm, có. Và thứ không có thứ tự là rất có khả năng gán các số hàng khác với thứ tự thực tế của các hàng trong bảng excel. Và vì vậy câu trả lời của tôi trở nên gần như hoàn toàn rác rưởi trong tình huống này. Xin lỗi, có vẻ như tôi đã hết các lựa chọn cho bạn trong thời gian này. Nếu chỉ có điều này: bạn có thể đánh số các hàng trong tài liệu gốc excel không? Tức là, thêm một cột với các giá trị đại diện cho các số hàng thực tế, vì vậy bạn có thể lọc nó trong SQL. –

16

Sử dụng một loạt [sheet1 $ A5: Z] thay vì toàn bộ tấm [sheet1 $]

SELECT * 
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$A5:Z]' 
); 
+0

Điều này có thể được thực hiện để loại trừ năm hàng cuối cùng trong đó tổng số hàng sẽ thay đổi mỗi lần? Bảng tính Excel của tôi có văn bản chân trang luôn bắt đầu một hàng sau hàng kết quả cuối cùng và đi vào năm hàng. Nhưng số hàng sẽ luôn khác nhau. Hiện tại, nếu bạn cố gắng nhập văn bản chân trang, hãy ngắt nhập vì văn bản đó tuân thủ các loại dữ liệu, v.v. – TravisPUK

Các vấn đề liên quan