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

Sage数据库左连接查询需求:获取含无订单客户的账户统计列表

解决Sage系统客户账户数据查询问题

嘿,我知道你现在卡在这个SQL查询上了——要拿到所有客户(包括没下过单的),还要筛选出指定时间段内消费低于阈值的账户,对吧?咱们来一步步搞定这个问题。

问题根源

你原来的SQL里,把TransactionDate的筛选条件放在了WHERE子句里,这会把没有交易记录的客户直接过滤掉!因为LEFT JOIN之后,没下单的客户对应的SLTransactionSummary字段全是NULL,WHERE里的TransactionDate Between ? And ?条件对NULL不成立,所以这些客户就被排除了,完全不符合你要包含未下单账户的需求。

修改后的SQL代码

SELECT 
    SLCustomerAccount.CustomerAccountNumber,
    ISNULL(Sum(SLTransactionSummary.InvoiceValue), 0) AS 'Sum of InvoiceValue'
FROM {oj SWA_live2.dbo.SLCustomerAccount SLCustomerAccount 
LEFT OUTER JOIN SWA_live2.dbo.SLTransactionSummary SLTransactionSummary 
    ON SLCustomerAccount.SLCustomerAccountID = SLTransactionSummary.SLCustomerAccountID
    -- 把日期条件移到JOIN的ON子句,保留未下单客户
    AND SLTransactionSummary.TransactionDate Between ? And ?}
-- 添加账户未冻结的筛选条件(请根据实际字段名调整)
WHERE SLCustomerAccount.IsFrozen = 0
GROUP BY SLCustomerAccount.CustomerAccountNumber
-- HAVING条件包含未下单的0值,同时筛选金额低于指定上限
HAVING ISNULL(Sum(SLTransactionSummary.InvoiceValue), 0) Between 0 And 50000
ORDER BY ISNULL(Sum(SLTransactionSummary.InvoiceValue), 0) DESC

关键修改点说明

  • 日期条件移到JOIN的ON子句:这样只会过滤掉指定时间段外的交易记录,但不会排除没有任何交易的客户,完美保留未下单账户。
  • 用ISNULL处理SUM结果:没下单的客户SUM结果是NULL,转成0后能正常显示,也符合你要统计金额总和的需求。
  • 添加账户未冻结条件:在WHERE子句里直接过滤冻结账户,这部分不影响LEFT JOIN的结果,因为是过滤主表SLCustomerAccount的记录。
  • HAVING子句适配NULL值:同样用ISNULL确保未下单的0值能被包含在筛选范围内。

额外提示

如果你的参数(金额阈值、日期范围)需要动态配置,直接替换?和50000为对应的参数即可,完全兼容你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:54:09