I'm trying to run the query below, but the Group2
column is adding the values without grouping by the ORCAMENTO
field. Can you help me:
select o.ORCAMENTO as "AP",o.VALOR as "Valor",
IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0) AS "Faturamento",
IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0) / o.VALOR as "Faturado",
(o.VALOR - (IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0))) as "Pendente",
(select SUM(ox.valor)
from orc01x as ox
left join orc01 as o on o.ORCAMENTO = ox.orcamento
where ox.tr =2) as "Grupo2",
group_concat(distinct f.DOCUMENTO) as "Nota",
group_concat(distinct f.SITUACAO) as "Status"
from fat02 as f
left join orc01 as o on o.ORCAMENTO = substring(f.REFERENCIA,4,5)
join fat02x as fx on fx.FATURA = f.DOCUMENTO and substring(fx.REFERENCIA,4,5) = o.ORCAMENTO
where year(o.DATA_APROV) = '2024'
and f.DOCUMENTO NOT IN (
SELECT f1.DOCUMENTO
FROM fat02 AS f1
WHERE f1.SITUACAO = 'C'
)
group by o.ORCAMENTO
I tried to do a separate left join, but that didn't work either.
You have no grouping in the Grupo2
subquery, and it's not a correlated subquery. So it's summing all rows in the join of the two tables, not grouping them by ORCAMENTO
.
Instead of putting the subquery in the SELECT list, you should join with a grouped subquery.
select o.ORCAMENTO as "AP",o.VALOR as "Valor",
IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0) AS "Faturamento",
IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0) / o.VALOR as "Faturado",
(o.VALOR - (IFNULL(SUM(fx.VALOR1), 0) + IFNULL(SUM(fx.VALOR2), 0))) as "Pendente",
o2.Grupo2,
group_concat(distinct f.DOCUMENTO) as "Nota",
group_concat(distinct f.SITUACAO) as "Status"
from fat02 as f
left join orc01 as o on o.ORCAMENTO = substring(f.REFERENCIA,4,5)
join fat02x as fx on fx.FATURA = f.DOCUMENTO and substring(fx.REFERENCIA,4,5) = o.ORCAMENTO
left join (
select o.ORCAMENTO, SUM(ox.valor) AS Grupo2
from orc01x as ox
left join orc01 as o on o.ORCAMENTO = ox.orcamento
where ox.tr =2
GROUP BY o.ORCAMENTO
) AS o2 ON o.ORCAMENTO = o2.ORCAMENTO
where year(o.DATA_APROV) = '2024'
and f.DOCUMENTO NOT IN (
SELECT f1.DOCUMENTO
FROM fat02 AS f1
WHERE f1.SITUACAO = 'C'
)
group by o.ORCAMENTO