如何合并SQL查询中因terminalnumber分组产生的重复支付类型结果?
解决方案
要合并同一支付类型的重复行,你需要把终端判断逻辑嵌套在聚合函数内部,同时去掉GROUP BY里的terminalnumber,这样就能按门店和支付类型汇总数据了:
修改后的SQL语句:
SELECT storenumber, bbbtendertypetext, -- 只汇总终端号>91的数值 SUM(CASE WHEN terminalnumber > 91 THEN financialamounttendered - financialchangeamount END) AS sco_net_value, -- 只汇总终端号<91的数值 SUM(CASE WHEN terminalnumber < 91 THEN financialamounttendered - financialchangeamount END) AS front_end_net_value, -- 统计所有终端的交易总数 COUNT(transactionid) AS transaction_count FROM AceTLogData.Tlog.tender WHERE transactiondatetime > '2022-09-21 00:00:00.000' AND transactiondatetime < '2022-09-22 00:03:00.000' GROUP BY storenumber, bbbtendertypetext -- 移除terminalnumber,按门店+支付类型分组 ORDER BY storenumber;
关键变化说明:
- 把
CASE从聚合函数外移到内部:原来的写法是先按终端分组再判断,现在是先筛选符合条件的终端行,再对这些行做聚合计算,这样就能在同一支付类型下汇总不同终端的数值。 - 移除
GROUP BY中的terminalnumber:同一门店、同一支付类型的所有终端数据会合并成一行,不会再出现重复的Visa/礼品卡行。 transaction_count直接统计所有交易ID,自动汇总该支付类型下所有终端的交易数量。
内容的提问来源于stack exchange,提问作者Artie
相关产品推荐
相关产品推荐

