2017-07-18 194 views
0

如何创建基于两个或三个键排列表的信息的列? 例如,此表中的排名变量是基于部门和名称:如何在sqlite中对表中的行进行排名?

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

我发现this solution但它在SQL,我不认为它适用于我的情况下,所有的信息都在一个表而SELECT和JOIN似乎将不同表中的信息结合在一起。 预先感谢您

+0

请提供您想要的示例数据输出。 –

+0

如何从两个相关栏中确定排名?特别是因为相同的值给杰夫和尼克两个不同的等级。 – Yunnosch

+0

Hi @CL。我期望的输出是“Rank”列和@Yunnosch等级是根据Department和Name确定的。所以在许多部门可能会有多个尼克斯,但排名列需要分别对每个部门的每个尼克排名 – Question

回答

1

你可以指望有多少行当前组在当前行之前来:

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); 

(该rowid柱否则使用相同的行区分使用的主键,如果有的话。)

+0

谢谢,它完美的工作。我必须首先创建一个'rowid'列,而这个'CREATE TABLE MyTable_ID(id integer primary key autoincrement,department,person); INSERT INTO MyTable_ID(department,person)SELECT department,person FROM MyTable_original;'然后我在表MyTable_ID中创建了一个额外的列'ALTER TABLE MyTable_ID ADD COLUMN Rank;'对于来自@CL的代码。上班需要将MyTable_ID重命名为MyTable – Question

+0

可以@CL。请解释为什么使用T2,为什么需要使用临时表T2来计算现有表中的列? – Question

+0

没有临时桌子。 AS为表名称创建一个别名,因为子查询需要引用两个不同行中的值。 –