none
Status com Diferença datas RRS feed

  • Pergunta

  • Boa Noite! Saúde e paz para todos.

    A SQL abaixo me retorna data vencimento e data pagamento

    SELECT
          Convert(varchar(10), [Data Vencimento],103) AS 'Data Vencimento'
          ,Convert(varchar(10), [Data Pagamento],103) AS 'Data Pagamento'
     FROM VendasBI

    Resultado 

    Dt Vencimento Dt Pagamento      

    03/11/2017 02/11/2017
    25/01/2018 05/02/2018
    14/03/2018 20/03/2018
    28/11/2017 03/12/2017
    02/03/2018 05/12/2017
    07/12/2017 05/10/2017
    25/11/2017 NULL

    Resultado Esperado, e criar uma coluna "Dias Pagamento"  que e diferença data vencimento com data pagamento

    e depois Status conforme abaixo

    Dt Vencimento Dt Pagamento                      Dias Pagamento                                                      Status

    03/11/2017 05/11/2017          2                                                       Pgt com ate 2 dias
    25/01/2018 05/02/2018          21                                                     Pgt com acima 20 dias
    25/11/2017 NULL                    Aqui e calcular dias em aberto             Lanct em aberto em ate xxx dias

    Obrigado a todos pela ajuda.

    sábado, 23 de janeiro de 2021 02:35

Respostas

  • Bom dia,

    Experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    with CTE_Calc as
    (
        SELECT
            Convert(varchar(10), [Data Vencimento], 103) AS 'Data Vencimento'
           ,Convert(varchar(10), [Data Pagamento], 103) AS 'Data Pagamento'
           ,case when [Data Pagamento] is null
                then datediff(day, current_timestamp, [Data Vencimento])
                then datediff(day, [Data Vencimento], [Data Pagamento])
            end as DiasPagamento
        FROM VendasBI
    )
    
    select
        [Data Vencimento],
        [Data Pagamento],
        DiasPagamento,
        case
            when DiasPagamento < 0 then 'Em aberto há ' + cast(DiasPagamento as varchar(5)) + ' dias'
            when DiasPagamento <= 20 then 'Pgto em até ' + cast(DiasPagamento as varchar(5)) + ' dias'
            else 'Pgto acima de 20 dias'
        end Status
    from CTE_Calc

    Espero que ajude


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


    • Editado gapimex sábado, 23 de janeiro de 2021 12:14
    • Marcado como Resposta Ronnie Von sábado, 23 de janeiro de 2021 22:44
    sábado, 23 de janeiro de 2021 12:14

Todas as Respostas

  • Bom dia,

    Experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    with CTE_Calc as
    (
        SELECT
            Convert(varchar(10), [Data Vencimento], 103) AS 'Data Vencimento'
           ,Convert(varchar(10), [Data Pagamento], 103) AS 'Data Pagamento'
           ,case when [Data Pagamento] is null
                then datediff(day, current_timestamp, [Data Vencimento])
                then datediff(day, [Data Vencimento], [Data Pagamento])
            end as DiasPagamento
        FROM VendasBI
    )
    
    select
        [Data Vencimento],
        [Data Pagamento],
        DiasPagamento,
        case
            when DiasPagamento < 0 then 'Em aberto há ' + cast(DiasPagamento as varchar(5)) + ' dias'
            when DiasPagamento <= 20 then 'Pgto em até ' + cast(DiasPagamento as varchar(5)) + ' dias'
            else 'Pgto acima de 20 dias'
        end Status
    from CTE_Calc

    Espero que ajude


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


    • Editado gapimex sábado, 23 de janeiro de 2021 12:14
    • Marcado como Resposta Ronnie Von sábado, 23 de janeiro de 2021 22:44
    sábado, 23 de janeiro de 2021 12:14
  • Jovem boa noite! Desculpas a demora, tive que voltar uma etapa aqui do processo, 

    veja como ficou 

                

     SELECT
            Convert(varchar(10), [Data Vencimento], 103) AS 'Data Vencimento'
           ,Convert(varchar(10), [Data Pagamento], 103) AS 'Data Pagamento'
           ,case when [Data Pagamento] is null    then ISNULL (DATEDIFF (DAY,[Data Vencimento] , GETDATE()),0)
                 when [Data Pagamento] is not null then ISNULL (DATEDIFF (DAY,[Data Vencimento] , [Data Pagamento]),0)  
                end as DiasPagamento
    , case 
            when [Data Pagamento] is null THEN  'Atraso'
        when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=1 AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0)  <=15      then 'Pago Atraso entre 1 e 15 dias' 
            when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=16 AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) <=30      then 'Pago Atraso entre 16 e 30 dias'
            when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=30 /*AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) <=30*/  then 'Pago Atraso acima de 30 Dias'
        when [Data Pagamento] =  [Data Vencimento] then  'Baixado em dia'

         END AS 'Parcela Paga Com:'
        FROM VendasBI

    Resultado 

    Dt Vencimento Dt Pagamento DiasPagamento      Parcela Paga Com:
    14/03/2018 20/03/2018 6                      Pago Atraso entre 1 e 15 dias
    28/11/2017 03/12/2017 5                      Pago Atraso entre 1 e 15 dias
    02/03/2018 05/12/2018 278                      Pago Atraso acima de 30 Dias
    07/12/2017 07/12/2017 0                      Baixado em dia
    25/11/2017 NULL          1155                      Atraso

    Resultado esperado

    Eu consegui colocar para dt pagamento, mas eu precisa fazer mesmo para os aberto conforme em Negrito.

    Dt Vencimento Dt Pagamento DiasPagamento      Parcela Paga Com:
    14/03/2018 20/03/2018 6                      Pago Atraso entre 1 e 15 dias
    28/11/2017 03/12/2017 5                      Pago Atraso entre 1 e 15 dias
    02/03/2018 05/12/2018 278                      Pago Atraso acima de 30 Dias
    07/12/2017 07/12/2017 0                      Baixado em dia
    25/11/2017 NULL          1155               Atraso com 1155 Dias (aqui criar mesmo padrão do pagamento)

    Obrigado saude e paz 

    sábado, 23 de janeiro de 2021 22:33
  • Professor conseguir dessa forma

                

    with CTE_Calc as
    (
        SELECT
            Convert(varchar(10), [Data Vencimento], 103) AS 'Data Vencimento'
           ,Convert(varchar(10), [Data Pagamento], 103) AS 'Data Pagamento'
           ,case when [Data Pagamento] is null    then ISNULL (DATEDIFF (DAY,[Data Vencimento] , GETDATE()),0)
                 when [Data Pagamento] is not null then ISNULL (DATEDIFF (DAY,[Data Vencimento] , [Data Pagamento]),0)  
                end as DiasPagamento
    , case 
            when [Data Pagamento] is null THEN  'Atraso'
        when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=1 AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0)  <=15      then 'Pago Atraso entre 1 e 15 dias' 
            when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=16 AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) <=30      then 'Pago Atraso entre 16 e 30 dias'
            when ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) >=30 /*AND ISNULL (DATEDIFF (DAY,[Data Vencimento] ,  [Data Pagamento]),0) <=30*/  then 'Pago Atraso acima de 30 Dias'
        when [Data Pagamento] =  [Data Vencimento] then  'Baixado em dia'

         END AS 'Parcela Paga Com:'
        FROM VendasBI
    )

    select
        [Data Vencimento],
        [Data Pagamento],
        DiasPagamento,
        case
        when DiasPagamento = 0 then 'Baixado em Dia ' /* cast(DiasPagamento as varchar(5)) + ' dia'*/
            when DiasPagamento >= 1 then 'Atraso há ' + cast(DiasPagamento as varchar(5)) + ' dias'
            when  [Data Pagamento] is not  null then 'Pgto em até ' + cast(DiasPagamento as varchar(5)) + ' dias'
            else 'Pgto acima de 20 dias'
        end Status,
    [Parcela Paga Com:]
    from CTE_Calc

    Obrigado pela ajuda de sempre.

    sábado, 23 de janeiro de 2021 22:44