gpt4 book ai didi

sql - 使用 with 子句消除具有空值的重复行

转载 作者:行者123 更新时间:2023-12-05 02:13:40 26 4
gpt4 key购买 nike

我们如何通过使用 with 子句语句仅选择在特定字段中具有值的那些来消除重复项?

查询是这样的:

with x as (--queries with multiple join tables, etc.)
select distinct * from x

输出如下:

Com_no   Company      Loc    Rewards
1 Mccin India 50
1 Mccin India
2 Rowle China 18
3 Draxel China 11
3 Draxel China
4 Robo UK

如您所见,我得到了重复的记录。我想摆脱不唯一的空值。也就是说,Robo 是唯一的,因为它在 Rewards 中只有 1 条记录为空值,所以我想保留它。

我试过这个:

 with x as (--queries with multiple join tables, etc.)
select distinct * from x where Rewards is not null

当然这是不对的,因为它也摆脱了 4 Robo UK

预期输出应该是:

1         Mccin      India      50
2 Rowle China 18
3 Draxel China 11
4 Robo UK

最佳答案

问题是您将这些行称为重复项,但它们不是重复项。他们是不同的。因此,您要做的是排除 Rewards 为 null 的行,除非没有任何具有非 null 值的行,然后选择不同的行。所以像这样:

select distinct * 
from x a
where Rewards is not null
or (Rewards is null and not exists (select 1 from x b where a.Com_no = b.Com_no
and b.Rewards is not null)

现在,您的 Robo 行仍将包括在内,因为在 x 中没有一行 Rewards 不为 null 的 Robo,但是具有 null Rewards 的其他 Companies 的行将被排除,因为它们没有 null 行。

关于sql - 使用 with 子句消除具有空值的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54777397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com