Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/01/2012, 12:08
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Orden Select "Natural"

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!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 24/01/2012 a las 16:31