Usuario
Consulta con IF u otro comando en SELECT

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
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
- Editado Javier Jiménez miércoles, 17 de julio de 2019 10:06
- Propuesto como respuesta Pablo RubioModerator viernes, 19 de julio de 2019 18: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.
- Propuesto como respuesta Pablo RubioModerator viernes, 19 de julio de 2019 18:30