Попробуйте разбить объединенные ячейки функцией DelRowSpan перед сортировкой, а после сортировки собрать функцией AddRowSpan аргумент объект таблица.
Функции разбивают и собирают только по первому столбцу.
Вызов
DelRowSpan(document.getElementById("mytable"))
AddRowSpan(document.getElementById("mytable"))
где "mytable" это id таблицы
function DelRowSpan(t){
var rr,rl,ir,rs,rh,irs,el;
rr=t.getElementsByTagName("TR")
rl=rr.length
for(ir=0;ir<rl;ir++){
if(rs=rr.item(ir).cells(0).getAttribute("rowspan")){
rs=parseInt(rs)
rr.item(ir).cells(0).removeAttribute("rowspan")
rh=rr.item(ir).cells(0).innerHTML
for(irs=1;irs<rs;irs++){
el=document.createElement("TD")
el.innerHTML=rh
rr.item(++ir).insertBefore(el,rr.item(ir).cells(0))
}
}
}
}
function AddRowSpan(t)
var rr,rl,ir,rs,rh;
rr=t.getElementsByTagName("TR")
rl=rr.length
for(ir=1;ir<rl;ir++){
if(rr.item(ir-1).cells(0).innerHTML==rr.item(ir).cells(0).innerHTML){
rh=rr.item(ir).cells(0).innerHTML
rs=1;
while(rh==rr.item(ir).cells(0).innerHTML){
rr.item(ir).removeChild(rr.item(ir++).children(0))
rs++
}
}
rr.item(ir-rs).cells(0).setAttribute("rowspan",rs)
}
}