You can use CASE When Then ELSE END
SELECT classificacao, descricao, saldo_anterior,
CASE WHEN MONTH(periodo)=1 THEN saldo_atual ELSE 0 END AS Janeiro,
CASE WHEN MONTH(periodo)=2 THEN saldo_atual ELSE 0 END AS Fevereiro,
CASE WHEN MONTH(periodo)=3 THEN saldo_atual ELSE 0 END AS Marco,
CASE WHEN MONTH(periodo)=4 THEN saldo_atual ELSE 0 END AS AS Abril,
CASE WHEN MONTH(periodo)=4 THEN saldo_atual ELSE 0 END AS Maio,
CASE WHEN MONTH(periodo)=6 THEN saldo_atual ELSE 0 END AS Junho,
CASE WHEN MONTH(periodo)=7 THEN saldo_atual ELSE 0 END AS Julho,
CASE WHEN MONTH(periodo)=8 THEN saldo_atual ELSE 0 END AS Agosto,
CASE WHEN MONTH(periodo)=9 THEN saldo_atual ELSE 0 END AS Setembro,
CASE WHEN MONTH(periodo)=10 THEN saldo_atual ELSE 0 END AS Outubro,
CASE WHEN MONTH(periodo)=11 THEN saldo_atual ELSE 0 END AS Novembro,
CASE WHEN MONTH(periodo)=12 THEN saldo_atual ELSE 0 END AS Dezembro
FROM tbl_balancete
GROUP BY classificacao, descricao
;
UPDATE 1:
Based on the structure later supplied I extrapolated a possible solution with the summations per year.
first subquery obtain a single ranking list per year, description and current balance
2nd subquery does the pivot by rating year and months
The last query does the left Join of the previous two aggregating by year, classification, description and previous balance and sum the values obtained for each month
SELECT plano.ano,
plano.classificacao,
plano.descricao,
plano.saldo_anterior,
SUM(Janeiro) AS Janeiro,
SUM(Fevereiro) AS Fevereiro,
SUM(Marco) AS Marco,
SUM(Abril) AS Abril,
SUM(Maio) AS Maio,
SUM(Junho) AS Junho,
SUM(Julho) AS Julho,
SUM(Agosto) AS Agosto,
SUM(Setembro) AS Setembro,
SUM(Outubro) AS Outubro,
SUM(Novembro) AS Novembro,
SUM(Dezembro) AS Dezembro
FROM
(SELECT DISTINCT classificacao,
descricao,
saldo_anterior,
year(periodo) AS Ano
FROM tbl_balancete) AS plano
LEFT JOIN
(SELECT classificacao,
year(periodo) AS Ano,
CASE
WHEN MONTH(periodo)=1 THEN saldo_atual
ELSE 0
END AS Janeiro,
CASE
WHEN MONTH(periodo)=2 THEN saldo_atual
ELSE 0
END AS Fevereiro,
CASE
WHEN MONTH(periodo)=3 THEN saldo_atual
ELSE 0
END AS Marco,
CASE
WHEN MONTH(periodo)=4 THEN saldo_atual
ELSE 0
END AS Abril,
CASE
WHEN MONTH(periodo)=4 THEN saldo_atual
ELSE 0
END AS Maio,
CASE
WHEN MONTH(periodo)=6 THEN saldo_atual
ELSE 0
END AS Junho,
CASE
WHEN MONTH(periodo)=7 THEN saldo_atual
ELSE 0
END AS Julho,
CASE
WHEN MONTH(periodo)=8 THEN saldo_atual
ELSE 0
END AS Agosto,
CASE
WHEN MONTH(periodo)=9 THEN saldo_atual
ELSE 0
END AS Setembro,
CASE
WHEN MONTH(periodo)=10 THEN saldo_atual
ELSE 0
END AS Outubro,
CASE
WHEN MONTH(periodo)=11 THEN saldo_atual
ELSE 0
END AS Novembro,
CASE
WHEN MONTH(periodo)=12 THEN saldo_atual
ELSE 0
END AS Dezembro
FROM tbl_balancete) AS acumulados ON plano.classificacao = acumulados.classificacao
AND plano.ano = acumulados.ano
GROUP BY plano.ano,
plano.classificacao,
plano.descricao,
plano.saldo_anterior
Now instead of returning Null returns 0, but continues without returning the following months
– Andrews Gomes
Publish the table structure
– Jorge Costa
Ready put.
– Andrews Gomes
See the update
– Jorge Costa