El filtrado de filas con valores NULOS sólo cuando un valor que ya tiene una fila con un valor NULO NO

0

Pregunta

Estoy utilizando SQL Server Management Studio 17.

Tengo un select con un grupo por el que devuelve los siguientes valores. Esto es sólo un subconjunto de 170k filas.

SELECT        child, parent
FROM            (SELECT child, parent
                          FROM table
                          GROUP BY child, parent) AS derivedtbl_1
ORDER BY child
Niño Los padres
201 NULL
201 991
201 1020
202 NULL
203 NULL

Estoy luchando para encontrar una instrucción select que filtra la primera fila. Si un niño ya tiene un padre que NO es NULL, el que yo quiero para filtrar la fila con el valor NULL.

He tratado de resolverlo con un caso al tener el recuento de instrucción. Por ejemplo, si existe un valor más de una vez en el niño de la columna, a continuación, lo quiero para filtrar la fila en donde los padres es NULA, pero todos los de mi código hasta ahora devuelve errores.

Niño Los padres
201 991
201 1020
202 NULL
203 NULL
sql sql-server
2021-11-23 09:48:35
2

Mejor respuesta

2

Usted puede utilizar existe la lógica aquí:

SELECT child, parent
FROM yourTable t1
WHERE
    Parent IS NOT NULL OR
    (Parent IS NULL AND
     NOT EXISTS (SELECT 1 FROM yourTable t2
                 WHERE t2.Child = t1.Child AND
                       t2.Parent IS NOT NULL));

screen capture from demo link below

Demo

2021-11-23 09:55:57
0

Puede utilizar una función de ventana para esto. Puede ser más rápido o más lento que el uso de un EXISTS auto-join, usted necesita para poner a prueba

SELECT
  child,
  parent
FROM (
    SELECT
      child,
      parent,
      AnyParent = MAX(parent) OVER (PARTITION BY child)
    FROM [table]
    GROUP BY child, parent
) AS derivedtbl_1
WHERE AnyParent IS NOT NULL;
ORDER BY child
2021-11-23 17:28:56

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................