如何在特定条件下返回不同的行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在特定条件下返回不同的行?相关的知识,希望对你有一定的参考价值。

我有一个如下表:

| FIELD_1 | FIELD_2 | FIELD_3 | FIELD_4 |
|---------|---------|---------|---------|
|   NULL  |   NULL  | potato  |  apple  |
|  basket |  fruit  | potato  |  apple  |
|   NULL  |   NULL  | potato  |  apple  |
|.........|.........|.........|.........|

FIELD_3FIELD_4总是填充。

我想遍历此表并获取所有字段的DISTINCT值,但对于填充了FIELD_1FIELD_2的行,仅获取该组字段而不是NULLS。

对于仅返回上面的表:

|  basket |  fruit  | potato  |  apple  |

[如果该行仅在FIELD_3FIELD_4中填充了土豆和苹果,则为该行。

我过去使用内部联接完成了类似的操作,其中我仅保留FIELD_1FIELD_2的最大行,但是现在这些字段为字符串,并且我想检查该值是否为NULL或没有。

有什么想法吗?

答案

嗯。 。 。如果我理解正确,那么当有任何其他值时,您想过滤掉前两列中的NULL值。但是如果没有,您想保留它们:

select t.*
from (select t.*,
             count(field_1) over (partition by field_3, field_4) as cnt_field_1,
             count(field_2) over (partition by field_3, field_4) as cnt_field_2,
             row_number() over (partition by field_3, field_4, field_1, field_2) as seqnum
      from t
     ) t
where seqnum = 1 and
      ( (field_1 is not null or field_2 is not null) or
        (cnt_field_1 = 0 and cnt_field_2 = 0)
      );

以上是关于如何在特定条件下返回不同的行?的主要内容,如果未能解决你的问题,请参考以下文章

如何返回满足特定条件的会话子集?

如何在不使用循环的情况下更新 SQL Server 中两组不同条件之间的行

如何删除excel中符合特定条件的所有行,以及随后的行

如何使不满足特定条件的行不出现在结果中

为啥 TDengine 数据库在相同的过滤条件下不能返回相同数量的行?

Oracle SQL 选择不同的查询以返回特定的行数