Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/01/2012, 16:20
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Orden Select "Natural"

Cita:
Iniciado por Andres95 Ver Mensaje
Suponiendo que son dos partes concatenadas dentro de un mismo campo...

Separandolas se ordena por ambos campos y para que las que no tienen parte numerica vayan al final se toman como 99999

Podriamos hacer..

Código:
SELECT   TEXTO
        ---------------------------------------------------------------------------------------------------
       , 
         CASE WHEN ISNUMERIC(TEXTO) = 1        THEN RIGHT('00000' + TEXTO, 5)	 
              WHEN CHARINDEX('-',TEXTO, 1) > 0 THEN RIGHT('00000' + SUBSTRING(TEXTO, 1, CHARINDEX('-',TEXTO, 1) - 1), 5) 
              ELSE '99999' END  [PARTE NUMERICA]
        ---------------------------------------------------------------------------------------------------
       , CASE WHEN ISNUMERIC(TEXTO) = 1        THEN ''
              WHEN CHARINDEX('-',TEXTO, 1) > 0 THEN SUBSTRING(TEXTO, CHARINDEX('-',TEXTO, 1), LEN(TEXTO)) 
              ELSE TEXTO END [PARTE TEXTO]             
--SUBSTRING(TEXTO, 1, 
FROM (
SELECT 'V2' TEXTO
UNION ALL
SELECT 'V1'
UNION ALL
SELECT '1'
UNION ALL
SELECT '2'
UNION ALL
SELECT '10'
UNION ALL
SELECT '11'
UNION ALL
SELECT '1-V1'
UNION ALL
SELECT '2-B11'
UNION ALL
SELECT '10-A23'
UNION ALL
SELECT '11-A23'
UNION ALL
SELECT '12-A11'
UNION ALL
SELECT 'PV8'
) S
ORDER BY 2,3
Resultando:

Código:
TEXTO  PARTE NUMERICA PARTE TEXTO
------ -------------- -----------
1      00001          
1-V1   00001          -V1
2      00002          
2-B11  00002          -B11
10     00010          
10-A23 00010          -A23
11     00011          
11-A23 00011          -A23
12-A11 00012          -A11
PV8    99999          PV8
V1     99999          V1
V2     99999          V2

(12 row(s) affected)
Es solo plasmar en un flujo logico las operaciones que mentalmente hacemos sin darnos cuenta..




Saludos!
Excelente aporte :) muy buena logica :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me