You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle数据库关联表后生成条件判断列的SQL查询需求

SQL查询:根据案件角色组合生成状态标识

我完全明白你的需求啦——要从关联后的表中,按案件分组查询两列:一列是案件编号,另一列根据案件里原告(Plaintiff)和被告(Defendant)的存在情况返回对应的状态值。

解决方案代码

这里直接给你可以复用的SQL语句,记得把你的关联表名换成实际的表名:

SELECT 
    `Case#`,
    CASE
        -- 同时存在原告和被告
        WHEN SUM(CASE WHEN Role = 'Plaintiff' THEN 1 ELSE 0 END) > 0 
             AND SUM(CASE WHEN Role = 'Defendant' THEN 1 ELSE 0 END) > 0 THEN 'OK'
        -- 仅存在被告
        WHEN SUM(CASE WHEN Role = 'Defendant' THEN 1 ELSE 0 END) > 0 THEN 'def'
        -- 仅存在原告
        WHEN SUM(CASE WHEN Role = 'Plaintiff' THEN 1 ELSE 0 END) > 0 THEN 'pltf'
        -- 两者都不存在
        ELSE 'none'
    END AS Status
FROM 
    你的关联表名
-- 如果需要过滤特定案件类型(比如只查Civil),可以加下面这行
-- WHERE CaseType = 'Civil'
GROUP BY 
    `Case#`;

代码解释

  • 内层的CASE WHEN会给每个匹配的角色标记为1,不匹配的为0,再用SUM统计每个案件里对应角色的总数量
  • 外层的CASE按优先级依次判断:先检查是否同时有原告和被告(优先级最高),再判断只有被告、只有原告的情况,最后兜底返回none
  • 通过GROUP BY Case#确保每个案件只返回一条结果,对应唯一的状态值

如果你的数据库支持COUNT_IF函数(比如MySQL 8.0+、PostgreSQL),还可以简化内层的聚合逻辑,让代码更简洁:

SELECT 
    `Case#`,
    CASE
        WHEN COUNT_IF(Role = 'Plaintiff') > 0 AND COUNT_IF(Role = 'Defendant') > 0 THEN 'OK'
        WHEN COUNT_IF(Role = 'Defendant') > 0 THEN 'def'
        WHEN COUNT_IF(Role = 'Plaintiff') > 0 THEN 'pltf'
        ELSE 'none'
    END AS Status
FROM 
    你的关联表名
GROUP BY 
    `Case#`;

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

火山引擎 最新活动