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

如何新增列判断同Client&ProductID下Amount差值是否非零?

问题:按Client和ProductID分组判断Amount差值是否非零

现有查询语句:

select Client , ProductID, M_POS_TYPE AS Keep_or_Keep_in_Transit, Amount
FROM inventory_table inv_table
JOIN inventory_position inv_pos
ON inv_pos.ProductID=inv_table.ProductID
group by Client, ProductID, M_POS_TYPE, Amount

需求:新增一列,检查同一Client和ProductID分组下,Amount列的数值差值是否不等于0(比如5-4≠0时标记为(Y))。已尝试CASE语句,但不确定如何按分组计算差值,需要适用于大量不同ProductID和Client的通用方案。


解决方案提示
  • 使用窗口函数结合PARTITION BY Client, ProductID,在不改变原有GROUP BY逻辑的前提下,直接在SELECT中计算分组内的数值差
  • 核心思路:根据业务逻辑选择合适的窗口计算方式:
    • 如果是分组内Amount的总和不为0(比如收支抵消后有余额):用SUM(Amount) OVER(PARTITION BY Client, ProductID)
    • 如果是分组内最大Amount与最小Amount的差不为0:用MAX(Amount) OVER(PARTITION BY Client, ProductID) - MIN(Amount) OVER(PARTITION BY Client, ProductID)
  • 将上述计算嵌入CASE语句,即可生成标记列,示例方向:
    CASE WHEN SUM(Amount) OVER(PARTITION BY Client, ProductID) != 0 THEN 'Y' ELSE 'N' END AS Diff_Flag
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:33:17