SQLite:添加包含行位置的列

| 我有一个SQLite表,我需要添加一列,其中包含SELECT指令指定的行位置。 SELECT指令包含两个ord​​er子句。 如果不清楚,下面是一个示例: 给定此数据:
id        | c1      | c2 
===============================
a         | 1       | 2     
b         | 1       | 3     
c         | 1       | 1     
d         | 2       | 2     
e         | 2       | 3     
f         | 2       | 1     
而这个查询:
SELECT * FROM table ORDER BY c1, c2
我需要这个结果表:
id        | c1      | c2      | position
=========================================
a         | 1       | 2       | 2
b         | 1       | 3       | 3
c         | 1       | 1       | 1
d         | 2       | 2       | 5
e         | 2       | 3       | 6
f         | 2       | 1       | 4
我该怎么做? 重要的提示: 这不是实际数据,甚至不是实际列。这只是一个例子。     
已邀请:
        此查询应为您提供所有您需要的字段:
SELECT 
   ( SELECT COUNT(0)
     FROM MyTable T1
     WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
   ) as \'position\', 
   c1,
   c2,
   ID
FROM 
   MyTable T2
ORDER BY 
   (c1 * 1000) + c2
现在,要按ID订购它们:
SELECT ID, c1, c2, position FROM
  (SELECT 
     (SELECT COUNT(0)
       FROM MyTable T1
       WHERE (T1.c1 * 1000) + T1.c2 <= (T2.c1 * 1000) + T2.c2
     ) as \'position\', 
     c1,
     c2,
     ID
  FROM
     MyTable T2 
  ORDER BY 
     (c1 * 1000) + c2
  ) T3
ORDER BY ID
笔记 如果内部的
Order By
不起作用,则可以将中间结果转储到临时表中,然后从临时表中选择带有最终Order By子句的内容。 上面的“ 1000”是系数。您需要确保该系数大于c2的最大值,但又不要太高以至于出现整数溢出。 替代方法 您可以使用AutoIncrement列将其插入临时表,然后根据所需顺序从该临时表中选择值。 http://www.sqlite.org/autoinc.html     

要回复问题请先登录注册