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

如何编写SQL校验两表同Outlet的金额总和是否匹配?

问题分析与正确SQL实现

原代码的问题

  • 用逗号连接表会产生笛卡尔积,导致计算的总和完全错误
  • CASE表达式中不能嵌套WHERE子句,WHERE用于过滤行,不能放在WHEN条件内
  • SELECT语句里不能用PRINT输出字符串,直接返回目标字符串即可
  • 缺少GROUP BY,无法按单个Outlet单独计算金额总和

正确实现逻辑

先分别计算两个表中每个Outlet的金额总和,再通过全连接关联两个结果集,最后用CASE判断每个Outlet的总和是否匹配:

WITH A_Summary AS (
    SELECT Outlet, SUM(Amount) AS Total_Amount
    FROM TableA
    GROUP BY Outlet
),
B_Summary AS (
    SELECT Outlet, SUM(Amount) AS Total_Amount
    FROM TableB
    GROUP BY Outlet
)
SELECT
    COALESCE(a.Outlet, b.Outlet) AS Outlet,
    CASE
        WHEN a.Total_Amount = b.Total_Amount THEN 'Match'
        ELSE 'Not Match'
    END AS Match_Result
FROM A_Summary a
FULL JOIN B_Summary b ON a.Outlet = b.Outlet;

代码说明

  1. CTE(公共表表达式):分别统计TableA和TableB中每个Outlet的总金额,生成两个汇总结果表
  2. FULL JOIN:确保不管是TableA有但TableB没有的Outlet,还是TableB有但TableA没有的Outlet,都能被纳入结果
  3. COALESCE:处理某一方不存在对应Outlet的情况,显示存在的那一方的Outlet名称
  4. CASE表达式:直接对比两个汇总表的总金额,输出对应的匹配状态

执行结果

基于你提供的数据,执行后会得到:

OutletMatch_Result
ANot Match
BNot Match
CNot Match

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:32:59