none
Consulta con IF u otro comando en SELECT RRS feed

  • Pregunta

  • Hola a tod@s: 

    Necesito hacer una consulta para añadir una columna nueva que se llame COD_PROVEEDOR.

    Partimos de esta consulta:

    CODIGO COD_FAMILIA OBSERVACIONES
    061352024004         06                   QUITAR PREFIJO 06
    20450030             78                   SE QUEDA IGUAL
    12K162630N00         12                   QUITAR PREFIJO 12
    135050100002         23                   SE QUEDA IGUAL
    38.764R              38                   QUITAR 38.
    500086544.00         08                   QUITAR EL PUNTO

    Y queremos obtener esta consulta


    CODIGO COD_FAMILIA COD_PROVEEDOR
    061352024004         06                   1352024004   
    20450030             78                   20450030            
    12K162630N00         12                   K162630N00  
    135050100002         23                   135050100002    
    38.764R              38                   764R
    500086544.00         08                   50008654400        

    ¿Como lo puedo hacer?

    Gracias de antemano.

    Saludos

    miércoles, 17 de julio de 2019 9:29

Todas las respuestas

  • No puedes tener un criterio basado en un campo de texto que contenga instrucciones en un formato aleatorio. Digo esto porque veo que por ejemplo en la primera linea pone "QUITAR PREFIJO 06" y en la 5 "QUITAR 38." cuando supongo que se refieren a realizar el mismo tipo de operación.

    Lo primero que tienes que ver es que tipos de operaciones se van a poder realizar. Suponiendo que sean los 3 que muestras en el ejemplo (Quitar prefijo, Quitar Punto, Dejar igual), yo lo que haría es añadir dos campos:

    OP_QuitarPrefijo Text Incluye el texto a quitar en el inicio de CODIGO

    OP_QuitarPunto  Bool Si es Verdadero se quita el punto de CODIGO

    De esta forma podrás recorrer los registros y en aquellos que tengan un texto en OP_QuitarPrefijo o tengan OP_QuitarPunto a Verdadero realizas la operación correspondiente y asignas OP_QuitarPrefijo a cadena vacía y OP_QuitarPunto a Falso según corresponda.


    Saludos, Javier J


    miércoles, 17 de julio de 2019 10:03
  • Voy a hacer consultas filtradas por cod_familia y su correspondiente sentencia para extraer los caracteres que quiero. Luego las ensamblaré con UNION ALL.

    miércoles, 17 de julio de 2019 13:30
  • Hola anjo31f:

    Puedes utilizar una sentencia condicional case:

    DECLARE @table TABLE
    (CODIGO        VARCHAR(20)
    , COD_FAMILIA   INT
    , OBSERVACIONES VARCHAR(100)
    );
    
    INSERT INTO @table
    	(CODIGO
       , COD_FAMILIA
       , OBSERVACIONES
    	)
    VALUES
    	   ( '061352024004', 06, 'QUITAR PREFIJO 06' ),
    	   ( '20450030', 78, 'SE QUEDA IGUAL' ),
    	   ( '12K162630N00', 12, 'QUITAR PREFIJO 12' ),
    	   ( '135050100002', 23, 'SE QUEDA IGUAL' ),
    	   ( '38.764R', 38, 'QUITAR 38.' ),
    	   ( '500086544.00', 08, 'QUITAR EL PUNTO' );
    
    SELECT CODIGO
    	 , COD_FAMILIA
    	 , CASE
    		   WHEN OBSERVACIONES LIKE 'QUITAR PREFIJO%' THEN SUBSTRING(CODIGO, 3, LEN(CODIGO))
    		   WHEN OBSERVACIONES LIKE 'QUITAR EL PUNTO%' THEN REPLACE(CODIGO, '.', '')
    		   WHEN OBSERVACIONES LIKE 'QUITAR 38.' THEN REPLACE(CODIGO, '38.', '')
    	   ELSE CODIGO
    	   END AS COD_PROVEEDOR
    	   FROM @table;

    Con cada condición específica, aplicas una u otra función.

    miércoles, 17 de julio de 2019 14:29