尝试在一个查询中获取带有行号的有序结果,但无法获得预期的结果。
问题:
我想将行号分配给有序结果(使用this link中的逻辑,在序列号上为零)
执行内部子查询时,我能够获得有序结果,但是当分配行号时,订单会更改。
因此,当我执行整个查询时,它没有给出预期的结果。
SqlFiddle链接: 请找到相同的sql fiddle。
预期产出:
rownum sequenceno
1 1
2 2
3 3
4 0
5 0
6 0
实际输出:
rownum sequenceno
1 0
2 2
3 0
4 1
5 0
6 3
请帮忙。
答案 0 :(得分:0)
在您的查询中,我限制为6,因为这是您要求的。如果你需要它可以进一步偏移id,例如,对于id 3到9,例如LIMIT 3,6
。我还将rowcount从子查询移到top查询,因为你想要最终产品的行。
SET @rownum=0;
SELECT rownum, vehDetails.* FROM (
SELECT @rownum:=@rownum + 1 AS rownum, vehDetails.*
FROM (
SELECT
vehname
,vehlastupdated
, vehicle.sequenceno
FROM vehicle
INNER JOIN user ON vehicle.custno = user.custno
WHERE user.userkey = '123456'
AND vehicle.custno = 1
ORDER BY (CASE WHEN vehicle.sequenceno = 0 THEN 1 ELSE 0 END)
,vehicle.sequenceno ASC
) vehDetails
) vehDetails
WHERE vehDetails.rownum BETWEEN 1 AND 6
ORDER BY sequenceno = 0,sequenceno ASC
如果您需要使用rownum执行更多操作,例如rownum IN (1,4,10)
,则可以在此处对此查询执行另一个子选择。