Usuário com melhor resposta
Dúvida ao calcular valores separando por meses

Pergunta
-
Pessoal boa tarde, estou com uma dificuldade aqui:
Tenho duas tabelas a de clientes e a de vendas, porem preciso efetuar uma query que traga o valor total mas por mes, exemplo
Janeiro Fev Março Abril...
O campo que tenho como referencia e a data de emissão da venda, preciso setar o ano de 2015 e ele mostra as colunas para cada mes com o total
quero somar todas as vendas dentro de cada mes, realmente estou com dificuldades, algum colega poderia dar uma luz?
Muito obrigado.
Respostas
-
SELECT [1] AS Jan, [2] AS Fev, [3] AS Mar, [4] AS Abr, [5] AS Mai, [6] AS Jun, [7] AS Jul, [8] AS Ago, [9] AS [Set], [10] AS [Out], [11] AS Nov, [12] AS Dez FROM ( SELECT TMOV.CODCFO AS 'CÓDIGO DO CLIENTE', FCFO.NOME AS 'NOME', DATEPART (MONTH, (TMOV.DATAEMISSAO)) as 'MÊS', SUM (TMOV.VALORBRUTO) AS totalmes FROM TMOV (NOLOCK) INNER JOIN FLAN (NOLOCK) ON FLAN.IDMOV = TMOV.IDMOV INNER JOIN FCFO (NOLOCK) ON FCFO.CODCFO = TMOV.CODCFO INNER JOIN TITMMOV (NOLOCK) ON TITMMOV.IDMOV = TMOV.IDMOV INNER JOIN TPRODUTO (NOLOCK)ON TPRODUTO.IDPRD = TITMMOV.IDPRD LEFT JOIN TITMMOVHISTORICO (NOLOCK) ON TITMMOVHISTORICO.NSEQITMMOV = TITMMOV.NSEQITMMOV AND TITMMOVHISTORICO.IDMOV = TMOV.IDMOV WHERE TMOV.CODCOLIGADA = '3' AND TMOV.CODFILIAL = '100' AND TMOV.CODTMV = '2.2.03' AND DATEPART (YEAR, FLAN.DATAEMISSAO) = '2015' AND TITMMOV.IDPRD = '12110' AND TMOV.STATUS <> 'C' AND FCFO.CGCCFO <> '222.222.222-22' AND TITMMOVHISTORICO.HISTORICOLONGO LIKE 'RECEBIMENTO DE APOSENTADORIA%' GROUP BY TMOV.CODCFO, FCFO.NOME, DATEPART (MONTH, (TMOV.DATAEMISSAO)) ) AS Vendas PIVOT ( SUM(totalmes) FOR MÊS IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) ) AS PivotTable;
attWilliam John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta diegobuenosantos segunda-feira, 24 de agosto de 2015 20:58
Todas as Respostas
-
Deste jeito:
select Datepart(month, data_emissao_venda) as mes, sum(valor) from vendas where Datepart(year, data_emissao_venda) =2015 group by Datepart(month, data_emissao_venda)
att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
neste caso tem que usar o pivot, veja esse exemplo:
SELECT * FROM (SELECT Cliente.nome, DATENAME(MONTH, dataemissao) mes, sum(vendas) as totalmes FROM vendas inner join cliente on vendas.clienteid=cliente.id GROUP BY DATENAME(MONTH, dataemissao),Cliente.nome PIVOT( SUM(totalmes) FOR Month IN ([Janeiro],[Fevereiro],[Março],[Abril],[Maio], [Junho],[Julho],[Agosta],[Setembro],[Outubro],[Novembro], [Dezembro])) AS MeuPivot
mais ou menos assim.. sem conhecer suas tabelas fica dificil uma resposta exata.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Boa tarde,
Você poderia utilizar Pivot dessa forma:
SELECT [1] AS Jan, [2] AS Fev, [3] AS Mar, [4] AS Abr, [5] AS Mai, [6] AS Jun, [7] AS Jul, [8] AS Ago, [9] AS [Set], [10] AS [Out], [11] AS Nov, [12] AS Dez FROM (select Datepart(month, data_emissao_venda) as mes, sum(valor) as valor from vendas where Datepart(year, data_emissao_venda) =2015 group by Datepart(month, data_emissao_venda) ) AS Vendas PIVOT ( SUM(valor) FOR mes IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) ) AS PivotTable;
Wesley Lisboa
-
o que voces me passaram ja esta funcionando, esta sao as tabelas, só preciso mesmo de uma coluna para cada mes
SELECT TMOV.CODCFO AS 'CÓDIGO DO CLIENTE', FCFO.NOME AS 'NOME', DATEPART (MONTH, (TMOV.DATAEMISSAO)) as 'MÊS', SUM (TMOV.VALORBRUTO) AS totalmes FROM TMOV (NOLOCK) INNER JOIN FLAN (NOLOCK) ON FLAN.IDMOV = TMOV.IDMOV INNER JOIN FCFO (NOLOCK) ON FCFO.CODCFO = TMOV.CODCFO INNER JOIN TITMMOV (NOLOCK) ON TITMMOV.IDMOV = TMOV.IDMOV INNER JOIN TPRODUTO (NOLOCK)ON TPRODUTO.IDPRD = TITMMOV.IDPRD LEFT JOIN TITMMOVHISTORICO (NOLOCK) ON TITMMOVHISTORICO.NSEQITMMOV = TITMMOV.NSEQITMMOV AND TITMMOVHISTORICO.IDMOV = TMOV.IDMOV WHERE TMOV.CODCOLIGADA = '3' AND TMOV.CODFILIAL = '100' AND TMOV.CODTMV = '2.2.03' AND DATEPART (YEAR, FLAN.DATAEMISSAO) = '2015' AND TITMMOV.IDPRD = '12110' AND TMOV.STATUS <> 'C' AND FCFO.CGCCFO <> '222.222.222-22' AND TITMMOVHISTORICO.HISTORICOLONGO LIKE 'RECEBIMENTO DE APOSENTADORIA%' GROUP BY TMOV.CODCFO, FCFO.NOME, DATEPART (MONTH, (TMOV.DATAEMISSAO))
Forum SQL Server
- Editado diegobuenosantos segunda-feira, 24 de agosto de 2015 20:23
-
SELECT [1] AS Jan, [2] AS Fev, [3] AS Mar, [4] AS Abr, [5] AS Mai, [6] AS Jun, [7] AS Jul, [8] AS Ago, [9] AS [Set], [10] AS [Out], [11] AS Nov, [12] AS Dez FROM ( SELECT TMOV.CODCFO AS 'CÓDIGO DO CLIENTE', FCFO.NOME AS 'NOME', DATEPART (MONTH, (TMOV.DATAEMISSAO)) as 'MÊS', SUM (TMOV.VALORBRUTO) AS totalmes FROM TMOV (NOLOCK) INNER JOIN FLAN (NOLOCK) ON FLAN.IDMOV = TMOV.IDMOV INNER JOIN FCFO (NOLOCK) ON FCFO.CODCFO = TMOV.CODCFO INNER JOIN TITMMOV (NOLOCK) ON TITMMOV.IDMOV = TMOV.IDMOV INNER JOIN TPRODUTO (NOLOCK)ON TPRODUTO.IDPRD = TITMMOV.IDPRD LEFT JOIN TITMMOVHISTORICO (NOLOCK) ON TITMMOVHISTORICO.NSEQITMMOV = TITMMOV.NSEQITMMOV AND TITMMOVHISTORICO.IDMOV = TMOV.IDMOV WHERE TMOV.CODCOLIGADA = '3' AND TMOV.CODFILIAL = '100' AND TMOV.CODTMV = '2.2.03' AND DATEPART (YEAR, FLAN.DATAEMISSAO) = '2015' AND TITMMOV.IDPRD = '12110' AND TMOV.STATUS <> 'C' AND FCFO.CGCCFO <> '222.222.222-22' AND TITMMOVHISTORICO.HISTORICOLONGO LIKE 'RECEBIMENTO DE APOSENTADORIA%' GROUP BY TMOV.CODCFO, FCFO.NOME, DATEPART (MONTH, (TMOV.DATAEMISSAO)) ) AS Vendas PIVOT ( SUM(totalmes) FOR MÊS IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) ) AS PivotTable;
attWilliam John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta diegobuenosantos segunda-feira, 24 de agosto de 2015 20:58
-
Wilian perfeito mesmo, mas você fez este em qual versão do sql server?
ta dando pra mim essa mensagem, se eu nao estiver errado, esta dizendo que eu preciso acertar a versao
Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the SET COMPATIBILITY_LEVEL option of ALTER DATABASE.
Forum SQL Server
- Editado diegobuenosantos segunda-feira, 24 de agosto de 2015 20:35
-