Supongo que el problema es que cuando filtras los resultados utilizando el Where - el sistema enumera las filas de nuevo.
La solución puede ser más o menos así:
Código SQL:
Ver originalWITH T AS
(SELECT 'Proy'+RIGHT('00000'+CAST(ROW_NUMBER() OVER(Partition BY anno ORDER BY codigo) AS VARCHAR),6) codigochar,
*
FROM libreta_topograf2)
SELECT *
FROM T
WHERE tipo_obra='xxxx';
Espero que te sirva de ayuda.