2017-07-18 3 views
0

Comment puis-je créer une colonne qui a classé les informations de la table en fonction de deux ou trois clés? Par exemple, dans ce tableau la variable de rang est basé sur Ministère et Nom:Comment classer les lignes d'une table dans sqlite?

Dep | Name | Rank 
----+------+------ 
1 | Jeff | 1 
1 | Jeff | 2 
1 | Paul | 1 
2 | Nick | 1 
2 | Nick | 2 

J'ai trouvé this solution mais il est dans SQL et je ne pense pas qu'il applique à mon cas que toutes les informations sont dans une table et les réponses semblent SELECT et JOIN combiner des informations de différentes tables. Nous vous remercions à l'avance

+0

Veuillez indiquer la sortie désirée pour les données d'exemple. –

+0

Comment le rang est-il déterminé à partir des deux colonnes pertinentes? D'autant plus que des valeurs identiques donnent deux rangs différents pour Jeff et Nick. – Yunnosch

+0

Bonjour @CL. ma sortie désirée est la colonne 'Rank' et @Yunnosch le rang est déterminé basé sur le département et le nom. Il peut donc y avoir plusieurs Nicks dans de nombreux départements, mais la colonne Rank doit classer chaque Nick dans chaque département séparément. – Question

Répondre

1

Vous pouvez compter le nombre de lignes viennent avant la ligne en cours dans le groupe actuel.

UPDATE MyTable 
SET Rank = (SELECT COUNT(*) 
      FROM MyTable AS T2 
      WHERE T2.Dep = MyTable.Dep 
       AND T2.Name = MyTable.Name 
       AND T2.rowid <= MyTable.rowid); 

(La colonne rowid est utilisée pour différencier les lignes sinon identiques Utilisez la clé primaire, si vous en avez un.)

+0

Merci, cela a fonctionné parfaitement. J'ai d'abord dû créer une colonne 'rowid' que je n'avais pas encore avec' CREATE TABLE MyTable_ID (id entier clé primaire autoincrement, department, person); INSERT INTO MyTable_ID (département, personne) SELECT département, personne FROM MyTable_original; 'Et puis j'ai créé une colonne supplémentaire dans la table MyTable_ID' ALTER TABLE MyTable_ID AJOUTER COLONNE Rang; 'Pour le code de @CL. pour travailler, il faut renommer la table MyTable_ID dans MyTable – Question

+0

pouvez-vous @CL. expliquez pourquoi vous utilisez T2, pourquoi une table temporaire T2 doit-elle être utilisée pour calculer une colonne dans une table existante? – Question

+0

Il n'y a pas de table temporaire. AS crée un alias pour le nom de la table, car la sous-requête doit faire référence aux valeurs de deux lignes différentes. –