Hola clammatus:
Si decidiste migrar de BD hubieras optado por versión más actual, en lugar de SQL Server 2000, pero bueno, ese es otro rollo. Vamos a checar el problema que tienes:
Tu campo NbCompleto es un CAMPO CALCULADO y como tal no puede formar parte de la cláusula ORDER BY, es por eso que te aparece el error, aquí tienes dos opciones.
PRIMERA OPCION: calcular nuevamente el campo NbCompleto en la sección ORDER BY, quedaría más o menos así:
Código SQL:
Ver originalSELECT
...
CASE
WHEN charindex('Ñ',ltrim(rtrim(t102.Nb_Completo)),1) <> 0 THEN STUFF(ltrim(rtrim(t102.Nb_Completo)),charindex('Ñ' ,ltrim(rtrim(t102.Nb_Completo)),1),1,'&')
ELSE ltrim(rtrim(t102.Nb_Completo))
END AS NbCompleto,
...
ORDER BY
CASE
WHEN charindex('Ñ',ltrim(rtrim(t102.Nb_Completo)),1) <> 0 THEN STUFF(ltrim(rtrim(t102.Nb_Completo)),charindex('Ñ' ,ltrim(rtrim(t102.Nb_Completo)),1),1,'&')
ELSE ltrim(rtrim(t102.Nb_Completo))
END, t103.Nu_ExpedienteUNAM, IsNull(De_Calificacion, '00')
Si observas se repite todo el código que tienes en tu SELECT en la parte del ORDER BY, sin poner el alias por supuesto, es lo mismo que estás haciendo para el campo IsNull(De_Calificacion, '00')
SEGUNDA OPCIÓN
Utilizar una subconsulta y ordenar en la consulta externa, es decir algo como esto:
Código SQL:
Ver originalSELECT T1.* FROM
(
SELECT DISTINCT t103.Nu_ExpedienteUNAM,
CASE
WHEN charindex('Ñ',ltrim(rtrim(t102.Nb_Completo)),1) <> 0 THEN STUFF(ltrim(rtrim(t102.Nb_Completo)),charindex('Ñ' ,ltrim(rtrim(t102.Nb_Completo)),1),1,'&')
ELSE ltrim(rtrim(t102.Nb_Completo))
END AS NbCompleto,
IsNull(De_Calificacion, '00')
FROM t102_dAlumnoIncorporacion t102, t103_dAlumnosAsignaturas t103
WHERE t102.Pk_CveOrigen = @PkCveOrigen
AND t102.Pk_CveCicEsc = @PkCveCicEsc
AND t102.Pk_CveEstatus IN ('ALU01','ALU04')
AND t102.Pk_CveOrigen = t103.Pk_CveOrigen
AND t102.Pk_CveCicEsc = t103.Pk_CveCicEsc
AND t102.Pk_Matricula = t103.Pk_Matricula
AND t103.De_GrupoUNAM NOT IN ('','9999')
AND t103.De_GrupoUNAM = @PkCveGrupoUNAM
AND t103.Pk_CveAsignatura = @PkCveAsignatura
) T1
ORDER BY NbCompleto, Nu_ExpedienteUNAM, IsNull(De_Calificacion, '00')
Si observas la consulta interna es la misma que pones, sólo quitando la parte del ORDER BY, el cual pones en el SELECT * externo. Y una recomendación final, evita listar tablas en el FROM y hacer las uniones en el WHERE. En lugar de esto utiliza JOIN's, es decir en lugar de poner
Código SQL:
Ver originalFROM Tabla1, Tabla2 WHERE Tabla1.CampoID = Tabla2.CampoID
Utiliza JOIN's (INNER, LEFT O RIGTH según sea el caso)
Código SQL:
Ver originalFROM Tabla1 INNER JOIN Tabla2 ON Tabla1.CampoID = Tabla2.CampoID
Aunque el resultado es el mismo, la diferencia en tiempos de respuesta puede ser enorme.
Saludos
Leo.