重新排序列数据以填补删除行后留下的空白?

时间:2015-03-19 02:04:36

标签: mysql

我试图找到一种方法来在删除后留下缺失值来重新排列列的内容。

麻烦..
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,数据

我知道有更好的方法可以解决这个问题,但是数据库是服务器的一部分,所以我不能改变它的运作方式,只能改变内容,甚至只能在特定时间改变。

我只能删除'失败的'数据并重新排序(到目前为止),以使软件将结果视为有效。

1 个答案:

答案 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中不允许这样做。