取行号
Oracle 有rownum 函数可直接取行号,但是mysql目前版本没有此功能,因此需要通过脚本来获取;
1. select @变量名
select (@i:= @i+1) as no, //设置排序自增
a.
from( 已排序好的sql ) a,
(select @i:=0) b //重置排序变量,否则每次查询序号都是累加,不是重新排序*
若要分组排序
SELECT
@r:= case when @type =t.bill_no then @r+1 else 1 end as rowNumm,
@type:=t.bill_no as bill_no,
t. from (sql )t,(SELECT @r:=0,@type:=’’ ) b
ORDER BY t.bill_no*
使用中发现存在数据库编码问题,又修改如下:
SELECT
@r:= case when (@type COLLATE utf8mb4_general_ci) =(t.bill_no COLLATE utf8mb4_general_ci) then @r+1 else 1 end as rowNumm,
@type:=t.bill_no as bill_no,
t.
from (sql)t,(SELECT @r:=0,@type:=’’ ) b
ORDER BY t.bill_no*
2. set @变量名
set @i:=0;
select @i:=@i+1 as no,
a.
from( 已排序好的sql)a*
如果要根据分组求和后的排序,需要根据求和值来排序(和相等的序号也相等,则添加新参数)
set @i:=0,@rowtruckid:=null;
select
case when @rowbillno = t.billno then @i
when @rowbillno := t.billno then @i:=@i+1
end no, t.
from( 已排序好的sql )t*