我有一个SQLite表,我需要添加一个包含SELECT指令给出的行位置的列。
SELECT指令包含两个order子句。
如果不清楚,这是一个例子:
鉴于此数据:
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
我该怎么做?
重要提示: 这不是实际数据,甚至不是实际列。这只是一个例子。
答案 0 :(得分:1)
此查询应该为您提供以下所有字段:
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子句。您可以使用AutoIncrement列插入临时表,然后根据所需的顺序从该临时表中选择值。