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

SQL查询求助:合并多行列数据并按组织统计约束次数

解决DAILY_LOG_CUSTOM_DATA的组织约束次数统计问题

我懂你现在的纠结——这个表把同一条记录的不同字段拆成了多行,跨行列关联统计确实容易踩坑。先帮你拆解原查询的问题,再给出可行的解决办法:

原查询的问题根源

你的原语句里,WHERE Field_Name = 'Restraint?' AND Recoded_Response = 1已经把所有Organization相关的行过滤掉了,所以后面的CASE WHEN Field_Name = 'Organization'永远不会触发,统计结果自然不对;另外GROUP BY DLSEQUENCE会返回每个序列的单独统计(而非整体总数),这也和你要的汇总结果不符。

解决方案1:用CTE聚合同一序列的信息

先把每个DLSEQUENCE对应的组织和约束状态整合到同一行,再统计总数:

WITH SequenceSummary AS (
    SELECT 
        DLSEQUENCE,
        -- 提取当前序列对应的组织名称
        MAX(CASE WHEN Field_Name = 'Organization' THEN Recoded_Response END) AS Organization,
        -- 判断当前序列是否存在约束(1代表Yes)
        MAX(CASE WHEN Field_Name = 'Restraint?' THEN Recoded_Response END) AS HasRestraint
    FROM DAILY_LOG_CUSTOM_DATA
    -- 只保留需要的两类字段,提升查询效率
    WHERE Field_Name IN ('Organization', 'Restraint?')
    GROUP BY DLSEQUENCE
    -- 只筛选出有约束的序列
    HAVING MAX(CASE WHEN Field_Name = 'Restraint?' THEN Recoded_Response END) = 1
)
SELECT 
    -- 统计ABC组织的约束次数
    COUNT(CASE WHEN Organization = 'ABC' THEN 1 END) AS ABC,
    -- 统计DEF组织的约束次数
    COUNT(CASE WHEN Organization = 'DEF' THEN 1 END) AS DEF
FROM SequenceSummary;

解决方案2:用自连接关联数据

把约束记录和对应的组织记录通过DLSEQUENCE关联,直接统计符合条件的行数:

SELECT 
    COUNT(CASE WHEN org.Recoded_Response = 'ABC' THEN 1 END) AS ABC,
    COUNT(CASE WHEN org.Recoded_Response = 'DEF' THEN 1 END) AS DEF
FROM DAILY_LOG_CUSTOM_DATA restraint
-- 关联同一序列下的组织信息
JOIN DAILY_LOG_CUSTOM_DATA org 
    ON restraint.DLSEQUENCE = org.DLSEQUENCE
WHERE 
    -- 筛选有约束的记录
    restraint.Field_Name = 'Restraint?' AND restraint.Recoded_Response = 1
    -- 关联对应的组织字段
    AND org.Field_Name = 'Organization';

这两种方法都能得到你想要的结果:以ABC、DEF为列,显示各自的约束总数。如果后续要增加其他组织,只需要在CASE语句里添加对应的判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:22:55