2008-09-23 11 views
5

J'utilise la base de données Informix, je veux une requête que vous pouvez également générer un numéro de ligne ainsi que la requêteLes numéros de ligne pour une requête dans Informix

Comme

select row_number(),firstName,lastName 
from students; 

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

Ici firstName, lastName sont de Base de données, où le numéro de ligne est généré dans une requête.

+0

Il est courtois de choisir une réponse - ou si rien ne répond à votre question, il est judicieux de modifier votre question afin qu'il puisse se faire comprendre. Vous devriez viser à sélectionner la meilleure réponse - s'il vous plaît. –

Répondre

1

Je pense que le moyen le plus simple serait d'utiliser le code suivant et d'ajuster son retour en conséquence. SELECT rowid, * FROM table

Cela fonctionne pour moi mais s'il vous plaît noter qu'il renverra le numéro de ligne dans la base de données, pas le numéro de ligne dans la requête.

P.S. c'est une réponse acceptée de Experts Exchange.

+1

Impossible de voir la 'réponse acceptée' sans abonnement - qui, même si gratuit, est au moins une nuisance. –

2

Il est possible que vous ne puissiez pas utiliser ROWID dans une table fragmentée sur plusieurs DBSpaces. Par conséquent, toute solution utilisant ROWID n'est pas particulièrement portable. Il est également fortement découragé.

Si vous ne disposez pas d'une colonne de série dans votre table source (ce qui est une meilleure façon de mettre en œuvre cela comme un concept général), jetez un oeil à CREATE SEQUENCE, qui est plus ou moins l'équivalent d'une fonction Orrible cela génère des nombres uniques quand SELECTed from (par opposition à SERIAL, qui génère le numéro unique quand la ligne est INSERT).

+0

une note: SERIAL dans ifx (au moins) 9, 10 et 11 n'est pas unique par défaut. Il reviendra à 1. – hometoast

6

Le meilleur moyen est d'utiliser une séquence (nouvellement initialisée).

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

Étant donné une table appelée Table3 avec 3 colonnes:

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

NOTE: suivants est un champ dans le tableau qui a des valeurs uniques dans l'ordre croissant. Les numéros ne doivent pas être contigus.

Voici requête pour renvoyer un rownumber (ROWNUM) ainsi que des résultats de la requête

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

La mise en forme ici laisse à désirer. Pour obtenir un exemple de matériau à largeur constante, indentez des données comme la ligne 'colnum name datatype' indentée par 4 espaces. Laissez le texte brut en retrait moins. –