Filtrovanie riadkov s NULL hodnoty iba vtedy, keď hodnota už má rad s NON hodnotu NULL

0

Otázka

Ja som pomocou SQL Server Management Studio 17.

Mám select so skupinou tým, že vráti nasledovné hodnoty. To je len podmnožinou 170k riadkov.

SELECT        child, parent
FROM            (SELECT child, parent
                          FROM table
                          GROUP BY child, parent) AS derivedtbl_1
ORDER BY child
Dieťa Rodič
201 NULL
201 991
201 1020
202 NULL
203 NULL

Som snaží nájsť select, ktorý filtruje prvom riadku. Ak je dieťa už má rodič, ktorý NIE je NULL, potom to chcem filtrovať riadok hodnotu NULL.

Snažil som sa to vyriešiť s prípadu, keď majú počítať ziskov a strát. Napríklad, ak existuje hodnota viac ako raz za dieťa stĺpec potom to chcem filtrovať riadok, kde rodič je NULL, ale všetky moje kód doteraz vráti chyby.

Dieťa Rodič
201 991
201 1020
202 NULL
203 NULL
sql sql-server
2021-11-23 09:48:35
2

Najlepšiu odpoveď

2

Môžete použiť existuje logika tu:

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

Môžete použiť okno funkciu pre tento. To môže byť rýchlejšie, alebo pomalšie než pomocou EXISTS self-pripojiť, musíte vyskúšať

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

V iných jazykoch

Táto stránka je v iných jazykoch

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