Para evitar dicho error, puede usar CASE
+ ISNUMERIC
para manejar escenarios cuando no puede convertir a int.
Cambiar
CONVERT(INT, CONVERT(VARCHAR(12), a.value))
a
CONVERT(INT,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
ELSE 0 END)
Básicamente, esto significa que si no puede convertirme a int, asigne un valor de 0 (en mi ejemplo)
Alternativamente, puede consultar este artículo sobre la creación de una función personalizada que verificará si a.value
es el número:http://www.tek-tips.com/faqs.cfm?fid=6423