2008-09-23 34 views
5

Tôi đang sử dụng cơ sở dữ liệu Informix, tôi muốn có một truy vấn mà bạn cũng có thể tạo ra một số hàng cùng với các truy vấnsố Row cho một truy vấn trong informix

Giống như

select row_number(),firstName,lastName 
from students; 

row_number() firstName lastName 
1   john  mathew 
2   ricky  pointing 
3   sachin tendulkar 

Đây firstName, lastName từ Cơ sở dữ liệu, khi số hàng được tạo trong truy vấn.

+0

Đó là lịch sự để chọn một câu trả lời - hoặc nếu không có gì là trả lời câu hỏi của bạn, nó là hợp lý để chỉnh sửa câu hỏi của bạn để nó có thể được hiểu. Bạn nên nhắm đến việc chọn câu trả lời hay nhất - làm ơn. –

Trả lời

1

Tôi nghĩ cách dễ nhất là sử dụng mã sau và điều chỉnh lợi tức của nó cho phù hợp. SELECT rowid, * FROM table

Nó làm việc cho tôi nhưng xin lưu ý rằng nó sẽ trả về số thứ tự trong cơ sở dữ liệu chứ không phải số thứ tự trong truy vấn.

P.S. đó là câu trả lời được chấp nhận từ Experts Exchange.

+1

Không thể nhìn thấy 'câu trả lời được chấp nhận' mà không cần đăng ký - trong đó, ngay cả khi miễn phí, ít nhất là một mối phiền toái. –

2

Bạn không thể sử dụng ROWID trong bảng bị phân mảnh trên nhiều DBSpaces, vì vậy, bất kỳ giải pháp nào sử dụng ROWID đều không thể di chuyển đặc biệt. Nó cũng không được khuyến khích.

Nếu bạn không có cột SERIAL trong bảng nguồn (đây là cách tốt hơn để thực hiện khái niệm này dưới dạng khái niệm chung), hãy xem CREATE SEQUENCE, ít nhiều tương đương với chức năng Khủng khiếp tạo ra các số duy nhất khi được chọn từ (trái ngược với SERIAL, tạo ra số duy nhất khi hàng được CH INSN).

+0

lưu ý: SERIAL trong ifx (ít nhất) 9, 10 và 11 không phải là duy nhất theo mặc định. Nó sẽ quấn quanh trở lại 1. – hometoast

6

Cách tốt nhất là sử dụng chuỗi (mới được khởi tạo).

begin work; 
create sequence myseq; 
select myseq.nextval,s.firstName,s.lastName from students s; 
drop sequence myseq; 
commit work; 
2

Cho một bảng gọi là Table3 với 3 cột:

colnum name datatype 
======= ===== === 
1  no  text; 
2  seq number; 
3  nm  text; 

LƯU Ý: seq là một lĩnh vực trong Bảng có giá trị duy nhất trong thứ tự tăng dần. Các con số không cần phải tiếp giáp.

Đây là truy vấn để trả về một rownumber (ROWNUM) cùng với kết quả truy vấn

SELECT table3.no, table3.seq, Table3.nm, 
     (SELECT COUNT(*) FROM Table3 AS Temp 
     WHERE Temp.seq < Table3.seq) + 1 AS RowNum 
    FROM Table3; 
+0

Định dạng ở đây để lại thứ gì đó mong muốn. Để có được tài liệu ví dụ có độ rộng cố định, các công cụ thụt lề như dòng 'colnum name datatype' được thụt lề bởi 4 khoảng trắng. Để lại văn bản thuần túy thụt lề ít hơn. –

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