SQL - Reemplazar NULL

   
Vista:

Reemplazar NULL

Publicado por Estudiante (8 intervenciones) el 13/07/2017 16:09:59
Buen dia, espero me puedan ayudar con esto, necesito reemplazar los campos NULL, por el valor siguiente a que no sea null, por ejemplo en la imagen, el primer NULL se reemplazaria por 5 y el siguiente NULL por el numero siguiente diferente de NULL.
1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Reemplazar NULL

Publicado por leonardo_josue (1138 intervenciones) el 13/07/2017 16:53:31
Hola Estudiante:

No nos dices con qué motor de BD's estás trabajando, pero te comento que la mayoría de ellos maneja alguna función en específico para hacer justamente lo que quieres, así, por ejemplo ORACLE tiene la función NVL, MySQL maneja la función IFNULL, SQL Server la función ISNULL y un largo etc.

https://www.w3schools.com/sql/sql_isnull.asp

En el peor de los casos, si el motor de BD's no cuenta con una función propia, puedes utilizar la sentencia CASE-WHEN para hacer tus validaciones.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazar NULL

Publicado por Estudiante (8 intervenciones) el 13/07/2017 16:57:55
Buen día Leo:

trabajo con Sql Server, utilize isnull y probe con case , con los dos me reemplaza valores, pero mi problema està en que necesito que me lo reemplaze por la siguiente fila cuyo valor no sea null.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Reemplazar NULL

Publicado por Isaias (1120 intervenciones) el 13/07/2017 19:01:19
Con el permiso de LEO

Este codigo fue probado en SQL Server 2016, todo dependera de tu version

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE @Table TABLE(
        ID INT,
        Val INT
)
 
INSERT INTO @Table (ID,Val) SELECT 1, 3
INSERT INTO @Table (ID,Val) SELECT 2, NULL
INSERT INTO @Table (ID,Val) SELECT 3, 5
INSERT INTO @Table (ID,Val) SELECT 4, NULL
INSERT INTO @Table (ID,Val) SELECT 5, NULL
INSERT INTO @Table (ID,Val) SELECT 6, 2
 
 
SELECT  *,
        ISNULL(Val, (SELECT TOP 1 Val FROM @Table WHERE ID > t.ID AND Val IS NOT NULL ORDER BY ID ASC))
FROM    @Table t

Resultado:

ID Val (No column name)
1 3 3
2 NULL 5
3 5 5
4 NULL 2
5 NULL 2
6 2 2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Reemplazar NULL

Publicado por Estudiante (8 intervenciones) el 13/07/2017 19:26:57
Geniall!!! Muchas Gracias Isaias. Tambien muchas gracias Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazar NULL

Publicado por leonardo_josue (1138 intervenciones) el 13/07/2017 20:03:46
Jejejejejeje, ahora si me tardé en contestar y me ganó el buen compañero Isaías...

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias

Reemplazar NULL

Publicado por Isaias (1120 intervenciones) el 13/07/2017 20:12:01
Ni lo diga amigo Leonardo, yo como su mas fiel admirador, siempre aprendiendo de sus respuestas. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazar NULL

Publicado por leonardo_josue (1138 intervenciones) el 13/07/2017 20:00:11
Hola de nuevo Estudiante:

Tu mismo estás diciendo lo que tienes que encontar:

siguiente fila cuyo valor no sea null.

entonces, lo que tienes que hacer es armar una subconsulta que te obtene esto... en realidad hay muchas maneras, dependiendo de cómo tengas organizados tus datos... suponiendo que tu campo id sea un consecutivo entonces checa este ejemplo en MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mysql> SELECT id, nombre, sueldo
    -> FROM miTabla;
+------+---------+--------+
| id   | nombre  | sueldo |
+------+---------+--------+
|    1 | Juan    |     37 |
|    2 | Perico  |   NULL |
|    3 | Andres  |      5 |
|    4 | Roberto |     12 |
|    5 | Antonio |   NULL |
|    6 | Leo     |     10 |
|    7 | Josue   |   NULL |
+------+---------+--------+
7 rows in set (0.00 sec)
 
mysql> SELECT
    ->   T1.id,
    ->   T1.nombre,
    ->   IFNULL(T1.sueldo, (SELECT sueldo
    ->                      FROM miTabla T2
    ->                      WHERE
    ->                          T2.id > T1.id
    ->                          AND T2.sueldo IS NOT NULL
    ->                      ORDER BY id
    ->                      LIMIT 1)
    ->         ) sueldo
    -> FROM miTabla T1;
+------+---------+--------+
| id   | nombre  | sueldo |
+------+---------+--------+
|    1 | Juan    |     37 |
|    2 | Perico  |      5 |
|    3 | Andres  |      5 |
|    4 | Roberto |     12 |
|    5 | Antonio |     10 |
|    6 | Leo     |     10 |
|    7 | Josue   |   NULL |
+------+---------+--------+
7 rows in set (0.00 sec)

OJO, observa el que en el último de los casos hay un problema porque NO EXISTE NINGÚN SUELDO DIFERENTE DE NULL DESPUÉS DEL ID=7... aquí tendrías que revisar cuál es tu lógica.

Se entiende??? ahora convierte este código a SQL Server utilizando las funciones propias.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad