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

Oracle中按销售部门分组2018年首次开票的客户

解决Oracle中按销售部门分组并筛选首次发票在2018年的客户问题

要实现你的需求,我们可以分两步走:先定位所有首次发票开具于2018年的客户,再基于这些客户的数据按销售部门做分组统计。下面提供两种实用的实现方案:

方案一:子查询筛选符合条件的客户后分组

这种方法先通过子查询锁定目标客户,再关联原表完成分组统计:

SELECT 
    sales_depart AS 销售部门,
    COUNT(DISTINCT Client_Number) AS 符合条件客户数,
    SUM(Netto) AS 总净销售额
FROM 
    your_invoice_table -- 替换成你的实际表名
WHERE 
    Client_Number IN (
        -- 子查询:找出首次发票在2018年的客户
        SELECT Client_Number
        FROM your_invoice_table
        GROUP BY Client_Number
        HAVING EXTRACT(YEAR FROM MIN(TO_DATE(Invoice_Date, 'MM.DD.RR'))) = 2018
    )
GROUP BY 
    sales_depart
ORDER BY 
    sales_depart;

方案二:用窗口函数标记首次发票日期后筛选分组

窗口函数能直观地为每条记录标记对应客户的首次发票日期,再筛选统计更灵活:

WITH client_first_invoice AS (
    SELECT 
        *,
        -- 计算每个客户的首次发票日期
        MIN(TO_DATE(Invoice_Date, 'MM.DD.RR')) OVER (PARTITION BY Client_Number) AS first_invoice_date
    FROM your_invoice_table -- 替换成你的实际表名
)
SELECT 
    sales_depart AS 销售部门,
    COUNT(DISTINCT Client_Number) AS 符合条件客户数,
    SUM(Netto) AS 总净销售额
FROM client_first_invoice
WHERE EXTRACT(YEAR FROM first_invoice_date) = 2018
GROUP BY sales_depart
ORDER BY sales_depart;

关键细节说明:

  • 日期转换:你的发票日期是字符串格式(如04.11.18),必须用TO_DATE(Invoice_Date, 'MM.DD.RR')转成Oracle的DATE类型,RR格式会自动识别两位年份(18对应2018,17对应2017)。
  • 筛选逻辑:通过MIN(Invoice_Date)获取每个客户的首次发票日期,再用EXTRACT(YEAR FROM ...)提取年份判断是否为2018。
  • 聚合调整:示例统计了客户数和总净销售额,你可以根据需求替换成COUNT(*)(发票数量)、AVG(Netto)(平均净销售额)等聚合函数。

用你的测试数据执行的话,结果会只包含销售部门0140,符合条件的客户是1022562和1022564,总净销售额为113+139+171=423。

内容的提问来源于stack exchange,提问作者Błażej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:21