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

如何为Shipment_INFO表添加Shipment_Size与Shipment_Ready计算列

解决方案:同时生成Shipment_Size和Shipment_Ready计算列

你可以通过两种方式整合两个计算列,以下是具体实现:

方式一:使用窗口函数(更简洁高效)

窗口函数无需额外关联子查询,直接在主查询中完成两个列的计算:

SELECT
  ShipmentID,
  ItemID,
  -- 统计当前ShipmentID下的物品数量
  COUNT(*) OVER (PARTITION BY ShipmentID) AS Shipment_Size,
  -- 判断该运单是否所有物品均为Packed状态
  CASE
    WHEN MAX(CASE WHEN Item_Status != 'Packed' THEN 1 ELSE 0 END) OVER (PARTITION BY ShipmentID) = 0
    THEN 'Yes'
    ELSE 'No'
  END AS Shipment_Ready
FROM Shipment_INFO;

方式二:基于你现有查询修改(关联子查询)

在你已有的子查询中新增All_Packed字段的计算,再在外层转换为Yes/No:

SELECT
  s.ShipmentID,
  s.ItemID,
  i.Shipment_Size,
  CASE WHEN i.All_Packed = 1 THEN 'Yes' ELSE 'No' END AS Shipment_Ready
FROM Shipment_INFO s
INNER JOIN (
  SELECT
    ShipmentID,
    COUNT(*) AS Shipment_Size,
    -- 若所有物品都是Packed,MIN返回1;否则返回0
    MIN(CASE WHEN Item_Status = 'Packed' THEN 1 ELSE 0 END) AS All_Packed
  FROM Shipment_INFO
  GROUP BY ShipmentID
) i ON i.ShipmentID = s.ShipmentID;

关键逻辑说明

  • Shipment_Size:两种方式都是通过按ShipmentID分组统计物品数量,窗口函数的PARTITION BY等同于子查询的GROUP BY。
  • Shipment_Ready:核心是校验当前运单下所有物品的状态:
    • 方式一中,用MAX(CASE...)检测是否存在非Packed的物品,若存在则返回1,最终判断为No;
    • 方式二中,用MIN(CASE...)确保所有物品都返回1(即状态为Packed),否则返回0,再转换为Yes/No。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:05:23