none
Somar dados de uma coluna calculada RRS feed

  • Pergunta

  • Olá amigos , preciso de um Help

    Fiz o seguinte select no meu banco

    SELECT O.ORCAMENTO_ID AS Expr1, FN.ORCAMENTO_ID, FN.CODIGOINTERNO, FN.DESCRICAO, FN.QTDE_NFE AS QTDE, OI.VALOR_LIQUIDO,
    COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0)
    AS VALORTOTAL, FN.UNIDADE, FN.CASAS_DECIMAIS, FN.PRODUTO_ID, OI.PRODUTO_ID AS Expr2, FN.VALOR_ST_FCP_ITEM AS ST, OI.ORCAMENTO_ID AS Expr3
    FROM            dbo.FN_ORCAMENTOPREVIANFE() AS FN INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID INNER JOIN dbo.TB_ORCAMENTOITEM AS OI 
    ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID WHERE (O.ORCAMENTO_ID =29908) Order By CODIGOINTERNO

    e ele me retornou o seguinte resultado

    Note que a coluna "VALORTOTAL" não existe no meu banco .. ela é uma soma do  "VALOR_LIQUIDO * QTDE", dai vem o problema, preciso retornar um campo no meu select com a soma de todas as linhas da coluna "VALORTOTAL". Alguem pra ajudar ??

    quinta-feira, 20 de fevereiro de 2020 20:47

Respostas

  • Se for em uma linha adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        SUM(VALORTOTAL) AS VALORTOTAL, 
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    GROUP BY GROUPING SETS
        ( (Expr1, ORCAMENTO_ID, CODIGOINTERNO, DESCRICAO, QTDE, VALOR_LIQUIDO, VALORUNITARIO, 
           UNIDADE, CASAS_DECIMAIS, PRODUTO_ID, Expr2, ST, Expr3), () )
    Order By CODIGOINTERNO
    
    

    Se for em uma coluna adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        VALORTOTAL,
        SUM(VALORTOTAL) OVER() AS TOTALGERAL,
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    Order By CODIGOINTERNO
    

    Espero que ajude


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

    quinta-feira, 20 de fevereiro de 2020 21:19

Todas as Respostas

  • Boa tarde,

    Wictor, você precisa dessa soma em uma linha adicional no final ou em uma coluna adicional das linhas que são retornadas pela consulta?


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

    quinta-feira, 20 de fevereiro de 2020 21:05
  • Se for em uma linha adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        SUM(VALORTOTAL) AS VALORTOTAL, 
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    GROUP BY GROUPING SETS
        ( (Expr1, ORCAMENTO_ID, CODIGOINTERNO, DESCRICAO, QTDE, VALOR_LIQUIDO, VALORUNITARIO, 
           UNIDADE, CASAS_DECIMAIS, PRODUTO_ID, Expr2, ST, Expr3), () )
    Order By CODIGOINTERNO
    
    

    Se for em uma coluna adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        VALORTOTAL,
        SUM(VALORTOTAL) OVER() AS TOTALGERAL,
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    Order By CODIGOINTERNO
    

    Espero que ajude


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

    quinta-feira, 20 de fevereiro de 2020 21:19
  • Se for em uma linha adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        SUM(VALORTOTAL) AS VALORTOTAL, 
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    GROUP BY GROUPING SETS
        ( (Expr1, ORCAMENTO_ID, CODIGOINTERNO, DESCRICAO, QTDE, VALOR_LIQUIDO, VALORUNITARIO, 
           UNIDADE, CASAS_DECIMAIS, PRODUTO_ID, Expr2, ST, Expr3), () )
    Order By CODIGOINTERNO
    
    

    Se for em uma coluna adicional experimente dessa forma:

    with CTE_CALC as
    (
        SELECT 
            O.ORCAMENTO_ID AS Expr1, 
            FN.ORCAMENTO_ID, 
            FN.CODIGOINTERNO, 
            FN.DESCRICAO, 
            FN.QTDE_NFE AS QTDE, 
            OI.VALOR_LIQUIDO,
            COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0) AS VALORUNITARIO, 
            (COALESCE(FN.VALOR_ST_FCP_ITEM, 0) / COALESCE(FN.QTDE_NFE, 0) + COALESCE(OI.VALOR_LIQUIDO, 0)) * COALESCE(FN.QTDE_NFE, 0) AS VALORTOTAL, 
            FN.UNIDADE, 
            FN.CASAS_DECIMAIS, 
            FN.PRODUTO_ID, 
            OI.PRODUTO_ID AS Expr2, 
            FN.VALOR_ST_FCP_ITEM AS ST, 
            OI.ORCAMENTO_ID AS Expr3
        FROM dbo.FN_ORCAMENTOPREVIANFE() AS FN 
        INNER JOIN dbo.TB_ORCAMENTO AS O ON FN.ORCAMENTO_ID = O.ORCAMENTO_ID 
        INNER JOIN dbo.TB_ORCAMENTOITEM AS OI ON FN.PRODUTO_ID = OI.PRODUTO_ID AND O.ORCAMENTO_ID = OI.ORCAMENTO_ID 
        WHERE O.ORCAMENTO_ID = 29908 
    )
    
    SELECT
        Expr1,
        ORCAMENTO_ID, 
        CODIGOINTERNO, 
        DESCRICAO, 
        QTDE, 
        VALOR_LIQUIDO,
        VALORUNITARIO, 
        VALORTOTAL,
        SUM(VALORTOTAL) OVER() AS TOTALGERAL,
        UNIDADE, 
        CASAS_DECIMAIS, 
        PRODUTO_ID, 
        Expr2, 
        ST, 
        Expr3
    FROM CTE_CALC
    Order By CODIGOINTERNO
    

    Espero que ajude


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

    Gapimex,

    Acredito que pela imagem parece ser uma coluna adicional.


    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]

    quinta-feira, 20 de fevereiro de 2020 22:28
  • Mesmo que a soma dos produtos se repita com o mesmo valor nas linhas, pra mim e mais fácil se for coluna mesmo amigo .. o importante é me trazer a soma de todos os produtos ! Obrigado
    quinta-feira, 20 de fevereiro de 2020 22:31
  • Amigo no meu caso aqui não deu certo pois retorno esses dados em um Dataset .. e esta dando erro no meu visual studio !
    quarta-feira, 26 de fevereiro de 2020 11:42
  • Wictor, você testou a consulta através do SQL Server Management Studio para ver se é retornado o resultado esperado?

    Sobre o retorno dos dados em um DataSet, acredito que deveria funcionar normalmente como outra consulta qualquer. Qual mensagem de erro foi exibida no Visual Studio?


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

    quarta-feira, 26 de fevereiro de 2020 12:29
  • Wictor,

    Rode esta query no SQL Server Management Studio ou no Azure Data Stuido e nos reporte caso ocorra algum ero.


    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]

    quarta-feira, 26 de fevereiro de 2020 21:21