2015-03-19 53 views
0

我試圖找到一種方法來重新排列刪除後留下一個值的列的內容。重新排序列數據以填充行刪除後留下的空位?

煩惱..
1 - 值不是唯一的,但可以重複任意次數,所以SORT和ROW_NUMBER將不起作用。
2 - 這些值在演示文稿中不是連續的,它們可以按任意順序出現,但必須總是 - 從1到最大值的整個過程中沒有任何間隙。

視覺的我試圖完成..
ID,錶殼,Othercols

1,1,數據
2,圖3,數據
6,5,數據
8,3,數據

我需要創建一個過程來找到第在Case中缺少值並將所有較高值拉低以填補空白。
ID,錶殼,OtherCols

1,1,數據
2,2,數據
6,3,1,數據
8,2,數據

我知道有比這更好的方法來解決問題,但數據庫是服務器的一部分,所以我不能改變它的運作方式,只有內容,甚至只在特定的時間。

我只能刪除'失敗'的數據並重新排序(到目前爲止手動)以使軟件將結果視爲有效。

回答

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中是不允許的。

+0

我沒有考慮在像這樣的兩個過程中處理它。 這適用於該任務。 謝謝! – user3144514 2015-03-19 02:23:16

相關問題