none
Soma Complicada RRS feed

  • Pergunta

  • Prezados Bom Dia!

    Estou criando uma SQL, ate agora porem nao estou conseguindo fazer um determinada conta, vou posta resumo abaixo:

    SQL 


    SELECT
    SUM(ITENS.QTDCOMPRADA)  AS QTD_PEDIDO,
    SUM(ITENS.PEDIDOEXTRA)  AS PEDIDOEXTRA,
    SUM(ITENS.DEPOSITO)     AS DEPOSITO

    Qtd Pedido             Qtd Extra                          Qtd Deposito                 TOTAL

    45.1000                5.0000                         NULL                              50,10              
    NULL                NULL                                 NULL
    4.8840                NULL                                 2.0000                           6.48

    Obrigado a todos.

    quinta-feira, 31 de julho de 2014 12:02

Respostas

  • Está gerando algum erro ?

    se estiver post aqui

    Tente desse forma:

    SELECT SUM(CAMPO_A_SER_SOMADO) AS NOME_DESEJADO FROM TABELA 
    Creio que será necessário executar o comando utilizando o comando JOIN


    http://luisgustavo12.wordpress.com/


    • Editado GuSouza quinta-feira, 31 de julho de 2014 12:14
    • Marcado como Resposta Ronnie Von sexta-feira, 1 de agosto de 2014 18:23
    quinta-feira, 31 de julho de 2014 12:13
  • Bom dia,

    Ronnie, experimente adicionar a função Coalesce para trocar null por zero:

    SUM(COALESCE(ITENS.QTDCOMPRADA, 0) + COALESCE(ITENS.PEDIDOEXTRA, 0) + COALESCE(ITENS.DEPOSITO, 0))

    Espero que ajude.


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

    • Marcado como Resposta Ronnie Von quinta-feira, 31 de julho de 2014 15:18
    quinta-feira, 31 de julho de 2014 13:31
  • Ronnie Von,

    Uma outra solução ao invês do COALESCE seria utilizer a função IsNull, verificando se o valor for nulo o SQL Server deverá trocar e retornar um valor desejado, por exemplo zero.

    Mas algumas observações são importantes:

    Comparando COALESCE e ISNULL

    A função ISNULL e a expressão COALESCE têm uma finalidade semelhante, mas podem se comportar de maneira diferente.  

    1. Como ISNULL é uma função, ela é avaliada apenas uma vez.  Conforme descrito acima, os valores de entrada para a expressão COALESCE podem ser avaliados várias vezes.


    2. A determinação de tipo de dados da expressão resultante é diferente.  ISNULL usa o tipo de dados do primeiro parâmetro, COALESCE segue as regras da expressão CASE e retorna o tipo de dados de valor com a precedência mais alta.


    3. A nulidade da expressão resultante é diferente para ISNULL e COALESCE.  O valor de retorno ISNULL é sempre considerado não anulável (supondo que o valor de retorno seja não nulo) enquanto que COALESCE com parâmetros não nulos é considerado NULL. Assim, as expressões ISNULL(NULL, 1) e COALESCE(NULL, 1), embora equivalentes, têm valores diferentes de nulidade. Isso fará diferença se você estiver usando essas expressões em colunas computadas, criando restrições de chave ou tornando determinístico o valor de retorno UDF escalar de modo que possa ser indexado como mostrado no exemplo a seguir.

    4. As validações para ISNULL e COALESCE também são diferentes.  Por exemplo, um valor NULO para ISNULL é convertido em int enquanto que, para COALESCE, você deve fornecer um tipo de dados.


    5. ISNULL utiliza somente 2 parâmetros enquanto que COALESCE utiliza um número variável de parâmetros.

    http://msdn.microsoft.com/pt-br/library/ms190349.aspx


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com



    quinta-feira, 31 de julho de 2014 19:44
  • Prezados na Verdade ele nao esta somando os campos NULL, tentei dessa forma e tb nao somou os campos NULL.

    SUM(ITENS.QTDCOMPRADA+ITENS.PEDIDOEXTRA+ITENS.DEPOSITO)

    Obrigado

    • Marcado como Resposta Ronnie Von quinta-feira, 31 de julho de 2014 15:18
    quinta-feira, 31 de julho de 2014 12:41

Todas as Respostas

  • Está gerando algum erro ?

    se estiver post aqui

    Tente desse forma:

    SELECT SUM(CAMPO_A_SER_SOMADO) AS NOME_DESEJADO FROM TABELA 
    Creio que será necessário executar o comando utilizando o comando JOIN


    http://luisgustavo12.wordpress.com/


    • Editado GuSouza quinta-feira, 31 de julho de 2014 12:14
    • Marcado como Resposta Ronnie Von sexta-feira, 1 de agosto de 2014 18:23
    quinta-feira, 31 de julho de 2014 12:13
  • Prezados na Verdade ele nao esta somando os campos NULL, tentei dessa forma e tb nao somou os campos NULL.

    SUM(ITENS.QTDCOMPRADA+ITENS.PEDIDOEXTRA+ITENS.DEPOSITO)

    Obrigado

    • Marcado como Resposta Ronnie Von quinta-feira, 31 de julho de 2014 15:18
    quinta-feira, 31 de julho de 2014 12:41
  • Bom dia,

    Ronnie, experimente adicionar a função Coalesce para trocar null por zero:

    SUM(COALESCE(ITENS.QTDCOMPRADA, 0) + COALESCE(ITENS.PEDIDOEXTRA, 0) + COALESCE(ITENS.DEPOSITO, 0))

    Espero que ajude.


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

    • Marcado como Resposta Ronnie Von quinta-feira, 31 de julho de 2014 15:18
    quinta-feira, 31 de julho de 2014 13:31
  • Amigos Obrigado pela Ajuda.

    Valeu demais.

    quinta-feira, 31 de julho de 2014 15:19
  • Ronnie Von,

    Uma outra solução ao invês do COALESCE seria utilizer a função IsNull, verificando se o valor for nulo o SQL Server deverá trocar e retornar um valor desejado, por exemplo zero.

    Mas algumas observações são importantes:

    Comparando COALESCE e ISNULL

    A função ISNULL e a expressão COALESCE têm uma finalidade semelhante, mas podem se comportar de maneira diferente.  

    1. Como ISNULL é uma função, ela é avaliada apenas uma vez.  Conforme descrito acima, os valores de entrada para a expressão COALESCE podem ser avaliados várias vezes.


    2. A determinação de tipo de dados da expressão resultante é diferente.  ISNULL usa o tipo de dados do primeiro parâmetro, COALESCE segue as regras da expressão CASE e retorna o tipo de dados de valor com a precedência mais alta.


    3. A nulidade da expressão resultante é diferente para ISNULL e COALESCE.  O valor de retorno ISNULL é sempre considerado não anulável (supondo que o valor de retorno seja não nulo) enquanto que COALESCE com parâmetros não nulos é considerado NULL. Assim, as expressões ISNULL(NULL, 1) e COALESCE(NULL, 1), embora equivalentes, têm valores diferentes de nulidade. Isso fará diferença se você estiver usando essas expressões em colunas computadas, criando restrições de chave ou tornando determinístico o valor de retorno UDF escalar de modo que possa ser indexado como mostrado no exemplo a seguir.

    4. As validações para ISNULL e COALESCE também são diferentes.  Por exemplo, um valor NULO para ISNULL é convertido em int enquanto que, para COALESCE, você deve fornecer um tipo de dados.


    5. ISNULL utiliza somente 2 parâmetros enquanto que COALESCE utiliza um número variável de parâmetros.

    http://msdn.microsoft.com/pt-br/library/ms190349.aspx


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com



    quinta-feira, 31 de julho de 2014 19:44
  • Obrigado Amigos, Ótima Explicação Junior, Meu Parabéns.

    sexta-feira, 1 de agosto de 2014 18:24