Отфильтровывание строк с нулевыми значениями только в том случае, если значение уже содержит строку с НЕНУЛЕВЫМ значением

0

Вопрос

Я использую среду SQL Server Management Studio 17.

У меня есть инструкция select с группой by, которая возвращает следующие значения. Это всего лишь подмножество из 170 тысяч строк.

SELECT        child, parent
FROM            (SELECT child, parent
                          FROM table
                          GROUP BY child, parent) AS derivedtbl_1
ORDER BY child
Ребенок Родитель
201 нулевой
201 991
201 1020
202 нулевой
203 нулевой

Я изо всех сил пытаюсь найти инструкцию select, которая отфильтровывает первую строку. Если у ребенка уже есть родитель, который НЕ является НУЛЕВЫМ, я хочу, чтобы он отфильтровал строку со значением NULL.

Я попытался решить эту проблему с помощью случая, когда у меня есть инструкция count. Например, если значение существует более одного раза в дочернем столбце, я хочу, чтобы оно отфильтровывало строку, в которой родитель равен НУЛЮ, но весь мой код до сих пор возвращает ошибки.

Ребенок Родитель
201 991
201 1020
202 нулевой
203 нулевой
sql sql-server
2021-11-23 09:48:35
2

Лучший ответ

2

Вы можете использовать существующую логику здесь:

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

ДЕМОНСТРАЦИЯ

2021-11-23 09:55:57
0

Для этого вы можете использовать функцию окна. Это может быть быстрее или медленнее, чем при использовании EXISTS самостоятельное присоединение, вам нужно протестировать

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

На других языках

Эта страница на других языках

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

Популярное в этой категории

Популярные вопросы в этой категории