2009-03-26 33 views
6

Tôi đang cố gắng tìm ra cách chọn một nửa bản ghi trong đó ID không có giá trị. Tôi muốn một nửa vì tôi sẽ sử dụng tập hợp kết quả đó để cập nhật một trường ID khác. Sau đó, tôi sẽ cập nhật phần còn lại với một giá trị khác cho trường ID đó. Vì vậy, về cơ bản tôi muốn cập nhật một nửa bản ghi someFieldID với một số và phần còn lại với một số khác chia tách bản cập nhật cơ bản giữa hai giá trị cho someFieldID trường tôi muốn cập nhật.Chỉ chọn một nửa bản ghi

Trả lời

11

Trong oracle, bạn có thể sử dụng các mẫu ROWNUM psuedocolumn. Tôi tin rằng trong máy chủ sql bạn có thể sử dụng TOP. Ví dụ:

select TOP 50 PERCENT * from table 
+0

Có loại 50% dưới cùng nào không? chẳng hạn như cho phép bạn nói rằng bạn có 100 bản ghi, dưới cùng sẽ là 50 cuối cùng? – PositiveGuy

+1

Sử dụng mệnh đề Đặt hàng –

6

Bạn có thể chọn theo phần trăm:

SELECT TOP 50 PERCENT *fields* FROM YourTable WHERE ... 
1

Các SQL sau sẽ trả lại col_ids của nửa đầu của bảng.

SELECT col_id FROM table 
WHERE rownum <= (SELECT count(col_id)/2 FROM table); 

Nếu tổng số col_ids là một số lẻ thì bạn sẽ nhận được nửa đầu - 1. Điều này là do, ví dụ, chúng tôi có tổng cộng 51 hồ sơ, số lượng (col_id)/2 lợi nhuận 25,5, và vì không có sự biểu thị bằng kết quả này, chúng tôi nhận được mọi thứ bằng 25 và thấp hơn. Điều đó có nghĩa là 26 người khác không được trả lại.

Tuy nhiên, tôi đã không nhìn thấy làm việc tuyên bố ngược lại:

SELECT col_id FROM table 
WHERE rownum > (SELECT count(col_id)/2 FROM table); 

Vì vậy, nếu bạn muốn một nửa còn lại của bảng, bạn chỉ có thể lưu trữ các kết quả đầu tiên vào một bảng tạm thời, cho phép gọi nó là TABLE_A. Sau đó chỉ cần làm TRỪ trên bảng gốc từ bảng này:

SELECT col_id FROM table
TRỪ
SELECT col_id FROM table_a

Hy vọng điều này giúp một ai đó.

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