gpt4 book ai didi

SQL Oracle - 如果所有行均为 'None',则返回消息,否则返回行。不返回 'None'

转载 作者:行者123 更新时间:2023-12-04 14:25:45 25 4
gpt4 key购买 nike

我有一张 table ,里面有 cus 和 rus。对于某些 cus 来说,有很多行,但所有 rus 都没有。在这种情况下,我想返回一条消息,例如“没有ru单位。”对于有 rus 的客户,我想返回他们的行。但不是那些没有 rus 的行......

我编造了一些要使用的数据。在本例中,我应该获取 cu-1 的所有行、包含 cu-2 消息的一行和 cu-3 的三行。

create table cu_ru ( 
cu varchar2(30),
ru varchar2(30)
)

insert into cu_ru (cu, ru) values ('cu-1', 'ru-1b');
insert into cu_ru (cu, ru) values ('cu-1', 'ru-1a');
insert into cu_ru (cu, ru) values ('cu-2', 'None');
insert into cu_ru (cu, ru) values ('cu-2', 'None');
insert into cu_ru (cu, ru) values ('cu-2', 'None');
insert into cu_ru (cu, ru) values ('cu-3', 'ru-3a');
insert into cu_ru (cu, ru) values ('cu-3', 'None');
insert into cu_ru (cu, ru) values ('cu-3', 'None');
insert into cu_ru (cu, ru) values ('cu-3', 'ru-3b');
insert into cu_ru (cu, ru) values ('cu-3', 'ru-3c');
insert into cu_ru (cu, ru) values ('cu-3', 'None');
insert into cu_ru (cu, ru) values ('cu-3', 'None');

我不努力:

select distinct t.cu,
(case when
(
select count(cu)
from cu_ru
where ru not like 'None'
and cu = t.cu
group by cu
) is null
then 'no ru unit' else ru end) as ru
from cu_ru t
order by cu, ru

输出为:

CU      RU
cu-1 ru-1a
cu-1 ru-1b
cu-2 no ru unit
cu-3 None
cu-3 ru-3a
cu-3 ru-3b
cu-3 ru-3c

如何从输出中删除“cu-3 None”

最佳答案

这是 @Littlefoot 使用标准 SQL 的查询的简化变体,应该在任何支持窗口聚合的 DBMS 中运行:

SELECT cu,
CASE WHEN ru = 'None' THEN 'no ru unit' ELSE ru end
FROM
( -- get distinct cu/ru combinations
SELECT cu, ru,
-- check if there's any other value besides None for a cu
MAX(CASE WHEN ru <> 'None' THEN 1 ELSE 0 END)
Over (PARTITION BY cu) AS OtherFlag
FROM cu_ru
GROUP BY cu, ru
) dt
WHERE ru <> 'None' -- don't show None
OR OtherFlag = 0 -- unless there's only None

关于SQL Oracle - 如果所有行均为 'None',则返回消息,否则返回行。不返回 'None',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351785/

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