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

在MariaDB中合并采购与销售数据表的月度统计查询需求

合并车辆采购与销售月度统计报表

可以通过左连接采购统计结果和销售统计结果,实现包含各月采购、销售数据的统一报表,同时处理有采购但无销售的场景。以下提供两种可行方案:

方案一:基于采购统计左连接销售统计

该方案会保留所有有采购记录的月份,无销售的月份销售数据将显示为0:

SELECT
    p.mes,
    p.importe_compra,
    p.cantidad_compra,
    COALESCE(s.importe_venta, 0) AS importe_venta,
    COALESCE(s.cantidad_venta, 0) AS cantidad_venta
FROM
    (
        -- 采购数据统计
        SELECT
            MONTH(fecha_compra) mes,
            SUM(precio_compra) importe_compra,
            COUNT(*) cantidad_compra
        FROM vehiculo
        WHERE YEAR(fecha_compra) = '2024'
        GROUP BY MONTH(fecha_compra)
    ) p
LEFT JOIN
    (
        -- 销售数据统计
        SELECT
            MONTH(fecha) mes,
            SUM(cotizacion) importe_venta,
            COUNT(*) cantidad_venta
        FROM propuesta
        WHERE estado = 'Vendido' AND YEAR(fecha) = '2024'
        GROUP BY MONTH(fecha)
    ) s ON p.mes = s.mes
ORDER BY p.mes;

关键说明:

  • LEFT JOIN确保采购统计的所有月份都被保留,即使对应月份没有销售数据
  • COALESCE函数将销售数据的NULL值转换为0,避免报表出现空值

方案二:基于完整月份列表关联双表统计

如果需要显示2024年所有12个月(哪怕该月既无采购也无销售),可以先生成1-12月的月份列表,再分别关联采购和销售统计:

WITH meses_2024 AS (
    SELECT 1 AS mes UNION SELECT 2 UNION SELECT 3 UNION
    SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION
    SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION
    SELECT 10 UNION SELECT 11 UNION SELECT 12
)
SELECT
    m.mes,
    COALESCE(p.importe_compra, 0) AS importe_compra,
    COALESCE(p.cantidad_compra, 0) AS cantidad_compra,
    COALESCE(s.importe_venta, 0) AS importe_venta,
    COALESCE(s.cantidad_venta, 0) AS cantidad_venta
FROM meses_2024 m
LEFT JOIN
    (
        SELECT
            MONTH(fecha_compra) mes,
            SUM(precio_compra) importe_compra,
            COUNT(*) cantidad_compra
        FROM vehiculo
        WHERE YEAR(fecha_compra) = '2024'
        GROUP BY MONTH(fecha_compra)
    ) p ON m.mes = p.mes
LEFT JOIN
    (
        SELECT
            MONTH(fecha) mes,
            SUM(cotizacion) importe_venta,
            COUNT(*) cantidad_venta
        FROM propuesta
        WHERE estado = 'Vendido' AND YEAR(fecha) = '2024'
        GROUP BY MONTH(fecha)
    ) s ON m.mes = s.mes
ORDER BY m.mes;

关键说明:

  • 用CTE(WITH子句)生成2024年的12个月份
  • 两次LEFT JOIN分别关联采购和销售统计,确保所有月份都能显示,无数据的字段用COALESCE转为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:22