You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL需求:无有效RU时返回提示,否则返回非空行

Oracle 查询:区分全为NULL的分组并返回提示信息

我来帮你搞定这个查询需求,核心思路是先判断每个cu分组下的ru是否全为NULL,再分两种情况返回对应结果:

解决方案SQL

WITH cu_ru_status AS (
    SELECT 
        cu,
        ru,
        -- 统计当前cu分组下非NULL的ru数量,0表示该cu的ru全为NULL
        COUNT(ru) OVER (PARTITION BY cu) AS non_null_ru_count
    FROM cu_ru
)
-- 情况1:有非NULL ru的cu,仅返回ru不为NULL的行
SELECT cu, ru
FROM cu_ru_status
WHERE non_null_ru_count > 0 AND ru IS NOT NULL
UNION ALL
-- 情况2:ru全为NULL的cu,返回一条提示行
SELECT DISTINCT cu, 'no ru unit.' AS ru
FROM cu_ru_status
WHERE non_null_ru_count = 0
ORDER BY cu;

测试数据准备

先插入符合你预期的测试数据(补全了缺失的部分):

CREATE TABLE cu_ru ( cu VARCHAR2(30), ru VARCHAR2(30) );

-- cu-1:所有ru非NULL,返回全部行
INSERT INTO cu_ru (cu, ru) VALUES ('cu-1', 'ru-1-1');
INSERT INTO cu_ru (cu, ru) VALUES ('cu-1', 'ru-1-2');
INSERT INTO cu_ru (cu, ru) VALUES ('cu-1', 'ru-1-3');

-- cu-2:所有ru为NULL,返回提示行
INSERT INTO cu_ru (cu, ru) VALUES ('cu-2', NULL);
INSERT INTO cu_ru (cu, ru) VALUES ('cu-2', NULL);

-- cu-3:存在非NULL ru,返回非NULL的3行(附带的NULL行自动过滤)
INSERT INTO cu_ru (cu, ru) VALUES ('cu-3', 'ru-3-1');
INSERT INTO cu_ru (cu, ru) VALUES ('cu-3', 'ru-3-2');
INSERT INTO cu_ru (cu, ru) VALUES ('cu-3', 'ru-3-3');
INSERT INTO cu_ru (cu, ru) VALUES ('cu-3', NULL);

逻辑解释

  1. CTE cu_ru_status:用窗口函数COUNT(ru) OVER (PARTITION BY cu)统计每个cu分组下非NULL的ru数量——因为COUNT(ru)会自动忽略NULL值,所以结果为0时说明该cu的所有ru都是NULL。
  2. 第一个SELECT:筛选出有非NULL ru的分组,只保留ru IS NOT NULL的行;
  3. 第二个SELECT:筛选出全为NULL的分组,用DISTINCT确保每个这样的cu只返回一条提示行;
  4. UNION ALL:把两种结果合并,最后按cu排序让结果更规整。

执行后就能得到你预期的结果:

  • cu-1的3条完整行
  • cu-2的1条提示行(cu-2 | no ru unit.)
  • cu-3的3条非NULL行

内容的提问来源于stack exchange,提问作者fallingdog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:05