Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/03/2014, 16:26
CRauda
 
Fecha de Ingreso: septiembre-2010
Mensajes: 91
Antigüedad: 14 años, 2 meses
Puntos: 9
Respuesta: Ordenamiento Ascendente de codigo

Hola libras, antes que nada gracias por tu tiempo y tu ayuda, fijate que intente hacer eso que me pusiste, pero al final da el mismo resultado, en tu ejemplo se veia todo bien pero el problema es cuando ya hay numeros arriba de 10, se comienzan a mezclar

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. valor VARCHAR(20)
  4. )
  5.  
  6.  
  7. INSERT INTO #temp VALUES ('4')
  8. INSERT INTO #temp VALUES ('2')
  9. INSERT INTO #temp VALUES ('3')
  10. INSERT INTO #temp VALUES ('1')
  11. INSERT INTO #temp VALUES ('10')
  12. INSERT INTO #temp VALUES ('11')
  13. INSERT INTO #temp VALUES ('A1')
  14. INSERT INTO #temp VALUES ('A2')
  15. INSERT INTO #temp VALUES ('5')
  16. INSERT INTO #temp VALUES ('6')
  17. INSERT INTO #temp VALUES ('A3')
  18. INSERT INTO #temp VALUES ('B1')
  19. INSERT INTO #temp VALUES ('7')
  20.  
  21. SELECT CONVERT(VARCHAR(20),campo) FROM(
  22. SELECT CASE WHEN isnumeric(valor)=1 THEN CONVERT(INT,valor) END campo FROM #temp
  23. ) AS t1 WHERE campo IS NOT NULL
  24. UNION
  25. SELECT * FROM(
  26. SELECT CASE WHEN isnumeric(valor)=0 THEN valor END campo FROM #temp
  27. ) AS t1 WHERE campo IS NOT NULL

Lanza este resultado:

Código XML:
Ver original
  1. 1
  2. 10
  3. 11
  4. 2
  5. 3
  6. 4
  7. 5
  8. 6
  9. 7
  10. A1
  11. A2
  12. A3
  13. B1

Conoces alguna otra forma de hacerlo? yo ya estuve probando hasta con el case when else:

Código SQL:
Ver original
  1. SELECT CASE WHEN isnumeric(CODIGO)=1 THEN CONVERT(INT,CODIGO) ELSE CODIGO END  AS campo FROM dbo.PAQUETE

Pero aunque le ponga el else siempre trata de hacer la conversión cuando hay letras y me tira error.

De antemano muchas gracias por la ayuda