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

问题描述 投票:0回答:1

我有一个如下表:

| 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或没有。

有什么想法吗?

sql google-bigquery
1个回答
0
投票

嗯。 。 。如果我理解正确,那么当有任何其他值时,您想过滤掉前两列中的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)
      );
© www.soinside.com 2019 - 2024. All rights reserved.