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

技术问询:如何查询集装箱内全部PO是否均达到指定状态

查询全PO达指定状态的集装箱

需求说明

需要从指定集装箱列表中,筛选出所有关联PO的状态均等于目标状态(如示例中的IN)的集装箱,或列出这些集装箱的全部PO记录。

示例数据

PO          COD_STC Container
DRYU9552662 R       003201511602
EGHU3582572 R       003201511602
TGBU6907376 A       003202788861
EITU1222407 IN      003202788861
EITU0309164 R       003202788861
SEKU6332900 IN      1059302779
CMAU1941417 IN      1059302779

解法1:仅获取符合条件的集装箱编号

通过分组聚合,对比集装箱的总PO数与目标状态PO数,判断是否全部达标:

SELECT Container
FROM sat_cont
WHERE Container IN ('003202788861','1059302779','003201511602')
GROUP BY Container
-- 总PO数 = 状态为IN的PO数,说明全PO达标
HAVING COUNT(*) = COUNT(CASE WHEN COD_STC = 'IN' THEN 1 END)

执行结果:仅返回1059302779(该集装箱的两个PO均为IN状态)。


解法2:获取符合条件的集装箱的全部PO记录

通过子查询先筛选出达标集装箱,再关联原表获取PO详情:

SELECT sc.PO, sc.COD_STC, sc.Container
FROM sat_cont sc
JOIN (
    SELECT Container
    FROM sat_cont
    WHERE Container IN ('003202788861','1059302779','003201511602')
    GROUP BY Container
    HAVING COUNT(*) = COUNT(CASE WHEN COD_STC = 'IN' THEN 1 END)
) valid_cont ON sc.Container = valid_cont.Container
ORDER BY sc.Container

执行结果:返回1059302779对应的两条PO记录。


解法3:用窗口函数实现(保留中间计算逻辑)

适合需要查看每条PO对应集装箱达标情况的场景:

SELECT PO, COD_STC, Container
FROM (
    SELECT 
        PO, COD_STC, Container,
        -- 统计当前集装箱的总PO数
        COUNT(*) OVER (PARTITION BY Container) AS total_po,
        -- 统计当前集装箱中状态为IN的PO数
        COUNT(CASE WHEN COD_STC = 'IN' THEN 1 END) OVER (PARTITION BY Container) AS valid_po
    FROM sat_cont
    WHERE Container IN ('003202788861','1059302779','003201511602')
) t
-- 总PO数等于达标PO数则筛选
WHERE total_po = valid_po
ORDER BY Container

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:23:17