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

Oracle SQL需求:按Item_no、Item_type、Region分组统一Valid列取值

解决方案

你可以使用Oracle的窗口函数来实现需求,无需对values列做分组聚合,既能保留原结果集的所有行,又能按指定分组逻辑统一valid列的值。

实现思路

用MAX()窗口函数按Item_no、item_type、region分区:

  • 字符串'Yes'的排序优先级高于'No',组内只要存在valid = 'Yes',MAX(valid)就会返回'Yes'
  • 若组内全是'No',则MAX(valid)返回'No'

完整SQL示例

假设你的原始查询为SELECT Item_no, item_type, region, valid, values FROM your_table,修改后的查询如下:

SELECT
    Item_no,
    item_type,
    region,
    MAX(valid) OVER (PARTITION BY Item_no, item_type, region) AS valid,
    values
FROM your_table;

执行结果

运行上述SQL后,会得到你预期的输出:

Item_noitem_typeregionvalidvalues
10001ATCUSYesCY412
10001ATCUSYesDSS1
10001ATCRUNoRX111
10001ATCRUNoDS12

通用适配说明

如果valid列不是字符串类型(比如布尔值),可以用更通用的逻辑实现:

SELECT
    Item_no,
    item_type,
    region,
    CASE 
        WHEN MAX(CASE WHEN valid = 'Yes' THEN 1 ELSE 0 END) OVER (PARTITION BY Item_no, item_type, region) = 1 
        THEN 'Yes' 
        ELSE 'No' 
    END AS valid,
    values
FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:50:07