如何在特定条件下返回不同的行?
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_3
,FIELD_4
总是填充。
我想遍历此表并获取所有字段的DISTINCT值,但对于填充了FIELD_1
,FIELD_2
的行,仅获取该组字段而不是NULLS。
对于仅返回上面的表:
| basket | fruit | potato | apple |
[如果该行仅在FIELD_3
,FIELD_4
中填充了土豆和苹果,则为该行。
我过去使用内部联接完成了类似的操作,其中我仅保留FIELD_1
,FIELD_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 中两组不同条件之间的行