我试图找到一种方法来在删除后留下缺失值来重新排列列的内容。
麻烦..
1 - 值不是唯一的,但可以重复任意次数,因此SORT和ROW_NUMBER将不起作用。
2 - 值在呈现中不是连续的,它们可以按任何顺序出现,但必须始终 - 从1到最大值的整体进度,没有任何间隙。
我想要实现的目标。
ID,Case,Othercols
1,1,数据
2,3,数据
6,5,数据
8,3,数据
我需要创建一个过程来在Case中找到缺失的值并向下拉所有较高的值以填补空白。
ID,Case,OtherCols
1,1,数据
2,2,数据
6,3,数据
8,2,数据
我知道有更好的方法可以解决这个问题,但是数据库是服务器的一部分,所以我不能改变它的运作方式,只能改变内容,甚至只能在特定时间改变。
我只能删除'失败的'数据并重新排序(到目前为止),以使软件将结果视为有效。
答案 0 :(得分:0)
如果我理解正确,您可以使用变量重新排序值:
select case, (@rn := @rn + 1) as newval
from (select distinct case from table t order by case) t cross join
(select @rn := 0) vars;
将此作为查找表,您可以重新编号值:
update table t join
(select case, (@rn := @rn + 1) as newval
from (select distinct case from table t order by case) t cross join
(select @rn := 0) vars
) tt
on t.case = tt.case
set t.case = tt.newval;
注意:这使用case
作为列名,即使在MySQL中不允许这样做。