当然是用JavaScript比较好:
<script language="JavaScript">
function sortTable(i_ColNo , i_TotalCols , s_TableName , i_StartRowNo , i_LastExceptRows , b_IsNumFlag){
var i_RowsNum , i_ColsNum;
var i_IndexCol;
var i_StartRow;

i_StartRow = i_StartRowNo - 1;
i_ColsNum = i_TotalCols;
i_RowsNum = s_TableName.rows.length - i_LastExceptRows - i_StartRow + 1;
i_IndexCol = i_ColNo - 1;
sortTableWithFlag(s_TableName , b_IsNumFlag , i_RowsNum , i_ColsNum , i_IndexCol , i_StartRow);
} function sortTableWithFlag(s_TableCtrl , b_IsNumFlag , i_RowsNum , i_ColsNum , i_IndexCol , i_StartRow){
var i , j;
var s_Cell = new Array(i_RowsNum * i_ColsNum) ;
var s_KeyCell = new Array(i_RowsNum);

if ( i_RowsNum <= i_StartRow + 1) return;
for ( i = 1; i < i_RowsNum; i++){ 
if ( b_IsNumFlag == 1 )
s_KeyCell[i - 1] = convertToInt(s_TableCtrl.rows( i + i_StartRow - 1).cells(i_IndexCol).innerHTML);
else
s_KeyCell[i - 1] = s_TableCtrl.rows( i + i_StartRow - 1).cells(i_IndexCol).innerHTML;
for ( j = 0; j < i_ColsNum; j++)
s_Cell[(i - 1) * i_ColsNum + j] = s_TableCtrl.rows(i + i_StartRow - 1).cells(j).innerHTML;
}
i_RowsNum--; 
sortRow(s_Cell , s_KeyCell , i_RowsNum , i_ColsNum);
i_RowsNum++; 
reAssignArray(s_TableCtrl , s_Cell , i_RowsNum , i_ColsNum , i_StartRow);
} function reAssignArray(s_TableCtrl , s_Cell , i_RowsNum , i_ColsNum , i_StartRow){
var i , j;

for (i = 1; i < i_RowsNum; i++)
for (j = 0; j < i_ColsNum; j++)
s_TableCtrl.rows( i + i_StartRow - 1).cells(j).innerHTML = s_Cell[( i - 1) * i_ColsNum + j];
} function sortRow(s_Cell , s_KeyCell , i_RowsNum , i_ColsNum){
var i_Offset , i_Switch , i_Limit , i_Row , s_Value , i_Column;

i_Offset = Math.floor(i_RowsNum / 2);
while ( i_Offset ){
// Loop until offset gets to zero.
i_Limit = i_RowsNum - i_Offset - 1 ;
do{
i_Switch = 0;  // Assume no switches at this offset. // Compare elements and switch ones out of order.
for ( i_Row = 0; i_Row <= i_Limit; i_Row++ ){
if ( s_KeyCell[i_Row] > s_KeyCell[i_Row + i_Offset] ){
for (i_Column = 0; i_Column < i_ColsNum; i_Column++){
s_Value = s_Cell[i_Row * i_ColsNum + i_Column];
s_Cell[i_Row * i_ColsNum + i_Column] = s_Cell[(i_Row + i_Offset) * i_ColsNum + i_Column];
s_Cell[(i_Row + i_Offset) * i_ColsNum + i_Column] = s_Value;
}
s_Value = s_KeyCell[i_Row];
s_KeyCell[i_Row] = s_KeyCell[i_Row + i_Offset];
s_KeyCell[i_Row + i_Offset] = s_Value;
i_Switch = i_Row;
}
}
i_Limit = i_Switch - i_Offset;

while ( i_Switch );
i_Offset = Math.floor(i_Offset / 2);
}
}

function convertToInt(s_String){
var s_OutString = "" , s_BitVal;
var i;
var i_Minus = 1;
var i_PointBit = 0
var i_Return = 0;

for ( i = 0 ; i < s_String.length; i++ ){
s_BitVal = s_String.substr(i,1);
if ( s_BitVal >= "0" && s_BitVal <= "9"){
s_OutString = s_OutString + s_BitVal;
}
else if (s_BitVal == "."){
i_PointBit = s_String.length-i-1;
}
else if (s_BitVal == "-" ){
i_Minus = -1;
}
}
if (i_Minus == -1){
i_PointBit = i_PointBit - 1;
}
i_Return = parseInt(s_OutString) * i_Minus / Math.pow(10 , i_PointBit);
return i_Return;
}
</script>
<TABLE border = "1" cellSpacing = "0"  id = "tagTbl">
<TR>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(1,7,tagTbl,2,0,0)"><B>社員コード</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(2,7,tagTbl,2,0,0)"><B>社員名</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(3,7,tagTbl,2,0,0)"><B>寮名</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(4,7,tagTbl,2,0,0)"><B>部屋NO</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(5,7,tagTbl,2,0,0)"><B>契約番号</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(6,7,tagTbl,2,0,0)"><B>契約日</B></A>
</TH>
<TH align = "middle" noWrap><A href = "JavaScript:sortTable(7,7,tagTbl,2,0,0)"><B>退寮日</B></A>
</TH>
</TR>
.....