我有一个车辆表,其中包含购买日期的字段,我可以使用
检索信息SELECT
MONTH(vehiculo.fecha_compra) mes,
SUM(vehiculo.precio_compra) importe,
COUNT(*) cantidad
FROM
vehiculo
WHERE
YEAR(vehiculo.fecha_compra) = '2024'
GROUP BY
MONTH(vehiculo.fecha_compra);
我还有第二个表,其中包含有关销售的数据,可以像这样查询:
SELECT
MONTH(propuesta.fecha) mes,
SUM(propuesta.cotizacion) importe,
COUNT(*) cantidad
FROM
propuesta
WHERE
estado = "Vendido" AND YEAR(propuesta.fecha) = '2024'
GROUP BY
MONTH(propuesta.fecha)
我会组合两个表以获得类似的内容:
主要问题是可能有几个月有采购,但没有销售。
通过一个非常快速的答案(如果给出更详细的答案或发现重复的答案,我将删除它):
您可以先生成 12 个月的列表(以确保您拥有全部)。然后您可以将两个“虚拟表”加入其中。
因此,例如(伪 SQL):
SELECT
T1.mes,
T2.importe_compras,
T2.cantidad_compras,
T3.importe_ventas,
T3.cantidad_ventas
FROM
(
-- A query that provides the month numbers 1-12 here
) T1
LEFT JOIN
(
-- The First Query Here
) T2
ON T1.mes = T2.Mes
LEFT JOIN
(
-- The Second Query Here
) T3
ON T1.mes = T3.mes
您需要一个完整的外部连接。然而,MySQL [仍然]没有实现它们。您可以通过将左连接与反半连接联合来模拟它。你可以这样做:
with
purchases as (
-- first query here
),
sales as (
-- second query here
)
select p.mes,
p.importe as importe_compras, p.cantidad as cantidad_compras,
s.importe as importe_ventas, s.cantidad as cantidad_ventas
from purchases p
left join sales s on s.mes = p.mes
union all
select s.mes, null, null, s.importe, s.cantidad
from sales s
left join purchases p on p.mes = s.mes
where p.mes is null