仅在一个 id 为空而另一个不为空的情况下获取 id

Dib*_*utt 2 sql-server

我有一个表格,其中 id 是重复的。

    +-------+------+
      ID      NUM
    +-------+------+
      1        50
      1        51
      2        52
      2        NULL
      3        NULL
      3        NULL 
      4        53
      4        54
      4        NULL
      5        NULL
      6        55
      7        NULL
    +-------+------+

Run Code Online (Sandbox Code Playgroud)

我想得到表,其中我只有在标记为 (num) 的列中同时具有空值和非空值的 id

像这样

 +------+-----+
   ID     NUM
 +------+-----+
   2      52
   2      NULL
   4      53
   4      54
   4      NULL
 +------+-----+

Run Code Online (Sandbox Code Playgroud)

Aki*_*ina 5

WITH cte AS ( SELECT id, 
                     num, 
                     COUNT(*) OVER (PARTITION BY id) total,
                     COUNT(num) OVER (PARTITION BY id) notnull
              FROM mytable )
SELECT id, num
FROM cte
WHERE notnull * (total - notnull) > 0
Run Code Online (Sandbox Code Playgroud)

或者

WITH cte AS ( SELECT id, 
                     num, 
                     FIRST_VALUE(num) OVER (PARTITION BY id ORDER BY num) mini,
                     FIRST_VALUE(num) OVER (PARTITION BY id ORDER BY num DESC) maxi
              FROM mytable )
SELECT id, num
FROM cte
WHERE mini IS NULL
  AND maxi IS NOT NULL
Run Code Online (Sandbox Code Playgroud)