过滤出来的行空值只有当一个值已经有一个行与非空值

0

的问题

我使用SQL服务器的管理工作室17.

我有一个选择的发言与小组通过返回的下列价值观。 这只是一个子集的170k行。

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

我在努力寻找一个选择的声明,筛选出的第一行。 如果儿童已经拥有父母,不是空然后我想到的过滤器的排空值。

我们试图要解决它与一个当情况下具有最发言。 例如,如果一个值存在一次以上的儿童列然后我想到过滤器的出行,其父母是空的,但我所有的代码,迄今返回的错误。

儿童
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ý
..................................................................................................................