# CRIAR COLUNAS DE SOMA COM CONDI&#199;&#195;O DE DATA &lt;=

• ### Pergunta

• BOM DIA.

A CONSULTA ABAIXA RETORNA PRA MIM UMA TABELA COM OS MESES DE JAN ATÉ DEZEMBRO, COM O MOVIMENTO DO RESPECTIVO MES, OK ESTÁ CORRETO.

AGORA QUERO QUE A SOMA CONSIDERE A DATA MENOR OU IGUAL O MÊS.   EXEMPLO JANEIRO, É SOMA DE TODOS OS MESES QUE FOREM MENOS OU IGUAL A 012019 POR EXEMPLO, FEVEREIRO <= 022019 E ASSIM POR DIANTE.

APENAS ACRECENTEI O OPERADOR MENOR NA CONSULTA, MAS OS VALORES TRAZIDOS ESTÃO ERRADOS.

SE ALGUEM PUDER AJUDAR.

```SELECT CONTA.CONTA Reduzido, ctcontas.clas_cta AS Conta, ctcontas.nome_cta AS Descrição,
CAST(SUM(CASE WHEN ANOMES<='012019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) JANEIRO,
CAST(SUM(CASE WHEN ANOMES<='022019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) FEVEREIRO,
CAST(SUM(CASE WHEN ANOMES<='032019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) MARCO,
CAST(SUM(CASE WHEN ANOMES<='042019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) ABRIL,
CAST(SUM(CASE WHEN ANOMES<='052019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) MAIO,
CAST(SUM(CASE WHEN ANOMES<='062019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) JUNHO,
CAST(SUM(CASE WHEN ANOMES<='072019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) JULHO,
CAST(SUM(CASE WHEN ANOMES<='082019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) AGOSTO,
CAST(SUM(CASE WHEN ANOMES<='092019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) SETEMBRO,
CAST(SUM(CASE WHEN ANOMES<='102019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) OUTUBRO,
CAST(SUM(CASE WHEN ANOMES<='112019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) NOVEMBRO,
CAST(SUM(CASE WHEN ANOMES<='122019' THEN VALOR ELSE 0 END) AS DECIMAL(18,2)) DEZEMBRO

FROM
(select dateformat(data_lan,'MMyyyy') ANOMES,
cdeb_lan CONTA,
vlor_lan VALOR

WHERE (ctlancto.codi_emp="&Text.From(empresa)&")

UNION ALL

select dateformat(data_lan,'MMyyyy') ANOMES,
ccre_lan CONTA,
vlor_lan*-1 VALOR

WHERE (ctcontas.codi_cta=CONTA.CONTA) AND (ctcontas.codi_emp="&Text.From(empresa)&") AND (ctcontas.SITUACAO_CTA='A') AND (ctcontas.tipo_cta='A')
GROUP BY CONTA.CONTA, clas_cta, nome_cta
ORDER BY clas_cta")```

sábado, 14 de setembro de 2019 15:37

### Todas as Respostas

No SQL Server não existe a função dateformat().

José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]

Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

sábado, 14 de setembro de 2019 16:18
• Boa tarde,

Sued_Junio, experimente inverter o parâmetro da dateformat para ficar primeiro o ano e depois o mes. Ex:

`select dateformat(data_lan,'yyyyMM') ANOMES,`

E para complementar será necessário alterar também as condições dos Cases. Ex:

`CAST(SUM(CASE WHEN ANOMES<='201901' THEN`

Espero que ajude

Assinatura: http://www.imoveisemexposicao.com.br

sábado, 14 de setembro de 2019 16:35
• Sued_Junior,

No SQL Server temos a diretiva Set DateFormat e não a função, existe a partir da versão 2012 a função Format(), ela poderá lhe ajudar se você estiver utilizando o SQL Server.

Abaixo lhe apresento um exemplo extraído da documentação oficial:

```DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result';

SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';```

Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

domingo, 15 de setembro de 2019 12:02