intanto prova questo, spero di non aver fatto errori di sintassi. cambia le parti che devi cambiare (come CONNESSIONE sostiuiscila con una variabile di connessione appropriata)
codice:
<%
sql="select t1.campo1 as campo1,t1.campo2 as campo2,t1.campoX as campoX,t1.cod_caratteristica as codice,t1.valore_caratteristica as valore"
sql=sql & " t2.descrizione_caratteristica as descr from tabella_anagrafica t1, tabella_descrizione t2 where t1.cod_caratteristica=t2.cod_caratteristica"
set rs=server.CreateObject("adodb.recordset")
rs.open sql, CONNESSIONE,3,3
'conto i record trovati
dim TOT
TOT=0
while not rs.eof
TOT=TOT+1
rs.movenext
wend
if TOT<>0 then
sql="select count(*) from tabella_caratteristiche group by codice_caratteristica"
set rs1=CONNESSIONE.execute(sql)
if not rs1.eof then
TOT_C=rs1(0)
end if
rs1.close : set rs1=nothing
redim arrayRs(TOT,TOT_C)
rs.movefirst
i=0
while not rs.eof
for j=0 to TOT_C
if cint(rs("codice"))=j then
arrayRs(i,j)=rs("valore")
else
arrayRs(i,j)=""
end if
next
i=i+1
rs.movenext
wend
'stampo la tabella
%>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td>Primo Campo</td>
<td>Secondo Campo</td>
<td>Campo X</td>
<%
for j=0 to TOT_C
%>
<td>Caratteristica <%= j+1 %></td>
<%next%>
</tr>
<%
i=0
rs.movefirst
while not rs.eof
%>
<tr>
<td><%= rs("campo1")%></td>
<td><%= rs("campo2")%></td>
<td><%= rs("campoX")%></td>
<%
for j=0 to TOT_C
%>
<td><%=arrayRs(i,j)%></td>
<%next%>
</tr>
<%
i=i+1
rs.movenext
wend
%>
</table>
<%
end if
%>