我有一个表格,其中的数据类似于:
Inven DESCRIPT PrintOrder
---------------------------------
1 D 9
2 B 0
3 A 5
4 Z 0
5 X 1
. . .
. . .
. . .
我想按列 DESCRIPT 降序 alpha (A - Z) 对表进行排序,然后更新列 PRINTORDER,以便完成后,PRINTORDER = 1 的记录是最高的 alpha (A),并且具有PRINTORDER 的最高值将是 alpha (Z) 中的最低值。
如果不使用临时列,这可能吗?如果没有,也不是破坏交易的因素,只是一种偏好。
期望的结果:
根据排序结果更新PrintOrder值
Inven DESCRIPT PrintOrder
---------------------------------
1 D 3
2 B 2
3 A 1
4 Z 5
5 X 4
最佳答案
我不清楚您是要修改该表还是只是创建一个结果集。以下是使用标准 SQL 的后者的解决方案:
select Inven, Descript, row_number() over (order by Descript) as PrintOrder
from table t
order by Descript;
编辑:
在 MySQL 中,select
看起来像:
select t.*
from (select Inven, Descript, (@rn := @rn + 1) as PrintOrder
from table t cross join (select @rn := 0) params
order by Descript
) t
order by Inven;
更新
稍微棘手一些,因为您无法排序和初始化变量:
update t
set PrintOrder = (@rn := coalesce(@rn + 1, 1))
order by Descript;
关于mysql - SQL 对 A 列进行排序并更新 B 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30927520/