只计算唯一的空行

Only count null rows when it's unique

我希望能够在数据有数据或者它是具有 null 的唯一记录时提取数据。没有 MAX 可以做到这一点吗?

姓名 Class 年级
约翰 数学 100
乔伊 数学
乔伊 科学 100
乔伊 科学
乔伊 科学 95

由于 Joey 只有一个 Math,它应该仍然在查询结果中。另一方面,由于 Joey 有两个科学 类,因此会过滤掉 null。

结果应该是:

姓名 Class 年级
约翰 数学 100
乔伊 数学
乔伊 科学 100
乔伊 科学 95

我尝试将查询放在一起,但运气不佳:

Select distinct Name, Class, Grade,
ROW_NUMBER() over (PARTITION by Name, Class order by Name asc) as RowNum
from Data
Where RowNum = 1

这是一个非常简化的查询版本,它包含 20 个不同的列,因此我想尽可能避免使用 groups 和 MAX。感谢您的帮助!谢谢。

你很接近,但需要两个重要的改变:

  • 您需要一个子查询来按 row_number().
  • 的结果进行过滤
  • window 函数需要做您真正想要的。

我的理解是你想要所有非 NULL 成绩。或者,如果所有成绩都是 NULL,那么 return 那些:

select Name, Class, Grade
from (Select d.*,
             rank() over (partition by Name, Class
                          order by (case when grade is not null then 1 else 2 end)
                         ) as seqnum
      from Data d
     ) d
Where seqnum = 1