2009-01-21 19 views

Trả lời

0

Chèn kết quả vào bảng lưu trữ, đặt hàng cách bạn muốn hiển thị chúng, nhưng với cột IDENTITY mới.

Bây giờ SELECT từ bảng mà chỉ là hàng loạt các ID mà bạn đang quan tâm.

(Hãy chắc chắn để làm sạch bàn khi bạn đã hoàn tất)


Hoặc làm điều đó trên máy khách , như bất kỳ điều gì cần làm với bản trình bày thường không được thực hiện trên Máy chủ SQL (theo ý kiến ​​của tôi)

1

Tôi sẽ xem câu trả lời cho this question - có khả năng giúp bạn bắt đầu.

1

Không có cách nào chính thức, không có *

Nói chung, bạn sẽ muốn có một chức năng trừu tượng-out trong lớp truy cập cơ sở dữ liệu của bạn mà sẽ đối phó với điều đó cho bạn. đưa ra gợi ý rằng bạn đang sử dụng MySQL hoặc PostgreSQL và nó có thể thêm mệnh đề 'LIMIT' vào truy vấn của bạn, hoặc rownum trên truy vấn con cho Oracle và vân vân. Nếu nó không biết nó có thể làm bất kỳ của những người, rơi trở lại để lấy rất nhiều và chỉ trở lại một lát của danh sách đầy đủ.

*: eta: hiện tại, trong ANSI SQL: 2003. Nhưng nó không được hỗ trợ trên toàn thế giới, nó thường thực hiện tồi tệ, và đó là một chút đau đớn bởi vì bạn phải di chuyển/sao chép TRÌNH TỰ của bạn thành một nơi mới trong tuyên bố, mà làm cho nó khó khăn hơn để quấn tự động:

SELECT * FROM (
    SELECT thiscol, thatcol, ROW_NUMBER() OVER (ORDER BY mtime DESC, id) AS rownumber 
) 
WHERE rownumber BETWEEN 10 AND 20 -- care, 1-based index 
ORDER BY rownumber; 

Ngoài ra còn có hậu tố "FETCH FIRST n ROWS ONLY" trong SQL: 2008 (và DB2, nơi nó bắt nguồn). Nhưng giống như tiền tố TOP trong SQL Server và cú pháp tương tự trong Informix, bạn không thể chỉ định điểm bắt đầu, vì vậy bạn vẫn phải tìm nạp và bỏ đi một số hàng.

+1

Các Tiêu chuẩn ISO SQL: 2008 quy định rằng bạn có thể chỉ ra điểm bắt đầu bằng "OFFSET n" trước "FETCH FIRST m ROWS ONLY".Nhưng tôi biết không có sản phẩm nào hiện đang triển khai OFFSET. –

0

BTW, Troels, PostgreSQL hỗ trợ Hạn chế/Offset

0
ANSI Sql example: 
offset=41, fetchsize=10 

SELECT TOP(10) * 
FROM table1 
WHERE table1.ID NOT IN (SELECT TOP(40) table1.ID FROM table1) 
+4

đẹp! nhưng tôi nghĩ TOP không phải là sql ansi, là T-SQL: ( –

0

Để phân trang, chúng tôi cần một cột RowNo để lọc qua nó - nó phải nằm trên một trường như id - với hai biến như @PageNo@PageRows. Vì vậy, tôi sử dụng truy vấn này:

SELECT * 
FROM (
    SELECT *, (SELECT COUNT(1) 
       FROM aTable ti 
       WHERE ti.id < t.id) As RowNo 
    FROM aTable t) tr 
WHERE 
    tr.RowNo >= (@PageNo - 1) * @PageRows + 1 
AND 
    tr.RowNo <= @PageNo * @PageRows 
Các vấn đề liên quan