Lo segundo que pedís no lo entiendo, pero lo primero es relativamente sencillo:
En cada encabezado ponés un enlace a la misma página pero pasándole un parámetro y un valor. Ej:
Código:
<a href="misma_pagina.asp?ordenar=2">ordenar por nombre</a>
Luego, al construir la sentencia SQL, definís el ORDER BY mediante IF's o SELECT CASE
Código:
ordenar = request.querystring("ordenar")
Select Case ordenar
Case 1
ordenar_por = "id"
Case 2
ordenar_por = "nombre"
Case 3
ordenar_por = "descrip"
Case else
ordenar_por = "id"
End Select
SQL = "SELECT * FROM tabla [WHERE condiciones] ORDER BY " & ordenar_por & " ASC"
También podrías pasar directamente el nombre del campo por el enlace y te ahorrás el SELECT CASE, pero... ¿qué le importa al usuario cómo demonios se llaman nuestros campos?