none
Soma de quatro colunas RRS feed

  • Dotaz

  • Boa tarde,

    Tenho uma query para fazer a soma de quatro colunas e dar um total. Só que só está fazendo a soma se todos os quatros campos tiver valor. Caso não tiver ele não faz e não é isso que eu quero. Quero que faça a soma mesmo se só um tiver e os outros não ou dois tiverem e os restantes não.

    SELECT [id], [Codigo], [Designacao], [Entidade], [OE], [Tipo_atividade], [Ano], [Status], [Ano_2018], [Ano_2019], [Ano_2020], [Ano_2021], [Ano_2018]+[Ano_2019]+[Ano_2020]+[Ano_2021] as [TOTAL], [RH], [FINANCIADOR], [Observacao] FROM [ATIVIDADES]
     where (@Ano='NULL' or [Ano] = @Ano)
            and (@Entidade='NULL' or [Entidade] = @Entidade)
            and (@Tipo_atividade='NULL' or [Tipo_atividade] = @Tipo_atividade)
            and (@Status='NULL' or [Status] = @Status)
         and (@OE='NULL' or [OE] = @OE)
      --option (recompile);

    středa 15. května 2019 18:16

Odpovědi

  • Experimente

    -- código #1
    SELECT [id], [Codigo], [Designacao], [Entidade], [OE], [Tipo_atividade], [Ano], [Status], 
           [Ano_2018], [Ano_2019], [Ano_2020], [Ano_2021], 
           (coalesce ([Ano_2018], 0) + coalesce ([Ano_2019], 0) + coalesce ([Ano_2020], 0) + coalesce ([Ano_2021], 0)) as [TOTAL], 
    [RH], [FINANCIADOR], [Observacao]
    FROM [ATIVIDADES] where (@Ano='NULL' or [Ano] = @Ano) and (@Entidade='NULL' or [Entidade] = @Entidade) and (@Tipo_atividade='NULL' or [Tipo_atividade] = @Tipo_atividade) and (@Status='NULL' or [Status] = @Status) and (@OE='NULL' or [OE] = @OE) --option (recompile);



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


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

    • Upravený José Diz středa 15. května 2019 18:32
    • Označen jako odpověď Cambrige čtvrtek 16. května 2019 14:52
    středa 15. května 2019 18:31
  • Cambrige,

    Utilize a função IsNull em cada coluna, veja o exemplo:

    SELECT [id], [Codigo], [Designacao], [Entidade], [OE], [Tipo_atividade], [Ano], [Status], [Ano_2018], [Ano_2019], [Ano_2020], [Ano_2021], 
    IsNull([Ano_2018],0)+
    IsNull([Ano_2019],0)+
    IsNull([Ano_2020],0)+
    IsNull([Ano_2021],1)= as [TOTAL], [RH], [FINANCIADOR], [Observacao] FROM [ATIVIDADES]
     where (@Ano='NULL' or [Ano] = @Ano)
            and (@Entidade='NULL' or [Entidade] = @Entidade)
            and (@Tipo_atividade='NULL' or [Tipo_atividade] = @Tipo_atividade)
            and (@Status='NULL' or [Status] = @Status)
         and (@OE='NULL' or [OE] = @OE)


    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]

    • Označen jako odpověď Cambrige čtvrtek 16. května 2019 14:52
    středa 15. května 2019 18:26
    Moderátor

Všechny reakce

  • Cambrige,

    Utilize a função IsNull em cada coluna, veja o exemplo:

    SELECT [id], [Codigo], [Designacao], [Entidade], [OE], [Tipo_atividade], [Ano], [Status], [Ano_2018], [Ano_2019], [Ano_2020], [Ano_2021], 
    IsNull([Ano_2018],0)+
    IsNull([Ano_2019],0)+
    IsNull([Ano_2020],0)+
    IsNull([Ano_2021],1)= as [TOTAL], [RH], [FINANCIADOR], [Observacao] FROM [ATIVIDADES]
     where (@Ano='NULL' or [Ano] = @Ano)
            and (@Entidade='NULL' or [Entidade] = @Entidade)
            and (@Tipo_atividade='NULL' or [Tipo_atividade] = @Tipo_atividade)
            and (@Status='NULL' or [Status] = @Status)
         and (@OE='NULL' or [OE] = @OE)


    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]

    • Označen jako odpověď Cambrige čtvrtek 16. května 2019 14:52
    středa 15. května 2019 18:26
    Moderátor
  • Experimente

    -- código #1
    SELECT [id], [Codigo], [Designacao], [Entidade], [OE], [Tipo_atividade], [Ano], [Status], 
           [Ano_2018], [Ano_2019], [Ano_2020], [Ano_2021], 
           (coalesce ([Ano_2018], 0) + coalesce ([Ano_2019], 0) + coalesce ([Ano_2020], 0) + coalesce ([Ano_2021], 0)) as [TOTAL], 
    [RH], [FINANCIADOR], [Observacao]
    FROM [ATIVIDADES] where (@Ano='NULL' or [Ano] = @Ano) and (@Entidade='NULL' or [Entidade] = @Entidade) and (@Tipo_atividade='NULL' or [Tipo_atividade] = @Tipo_atividade) and (@Status='NULL' or [Status] = @Status) and (@OE='NULL' or [OE] = @OE) --option (recompile);



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


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

    • Upravený José Diz středa 15. května 2019 18:32
    • Označen jako odpověď Cambrige čtvrtek 16. května 2019 14:52
    středa 15. května 2019 18:31