none
CRIAR COLUNAS DE SOMA COM CONDIÇÃO DE DATA <= RRS feed

  • 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 
                                                     from bethadba.ctlancto  ctlancto
                                                     
                                                     WHERE (ctlancto.codi_emp="&Text.From(empresa)&") 
    
                                                          UNION ALL 
    
                                                     select dateformat(data_lan,'MMyyyy') ANOMES,
                                                      ccre_lan CONTA, 
                                                      vlor_lan*-1 VALOR 
                                                     from bethadba.ctlancto  ctlancto
                                                     WHERE (ctlancto.codi_emp="&Text.From(empresa)&")) CONTA, bethadba.ctcontas
    
                                                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

  • Qual é o gerenciador de banco de dados?

    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