필터링하는 행 NULL 값이 있는 경우에만 값을 이미 행 NULL 이 아닌 값

0

질문

나는 SQL 을 사용하여 서버 관리 스튜디오 17.

나는 선택이 있는 문은 그룹으로 다음 값을 반환합니다. 이 하위 집합의 170k 행이 있습니다.

SELECT        child, parent
FROM            (SELECT child, parent
                          FROM table
                          GROUP BY child, parent) AS derivedtbl_1
ORDER BY child
201 NULL
201 991
201 1020
202 NULL
203 NULL

나를 찾기 위해 고군분투하는 select 문을 여는 첫 번째 행이 있습니다. 만약 이미 아이가 부모 NULL 이 아닌 그때 나는 그것을 필터링하는 행 NULL 값입니다.

나는 그것을 해결하려고 가는 경우는 수 statement. 는 경우 예를 들어,값에 존재하는 두 번 이상에서 아이 열을 다하고 필터링하는 행위 NULL 하지만 모두의 내 코드는 지금까지 반환 오류가 있습니다.

201 991
201 1020
202 NULL
203 NULL
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ý
..................................................................................................................