none
USAR O VALOR MAXIMO DE UMA COLUNA PARA FAZER UM CALCULO. RRS feed

  • Pergunta

  • Olá amigos,

    estou tentando usar o valor maximo de uma coluna para fazer um calculo, mas não estou conseguindo, segue abaixo exemplo.

    SELECT A.ORDEM AS ORD, B.CODIGO, B.NOME, B.CODIGONCM AS NCM, A.CST, A.CFOP, a.QUANT,
    A.DESCONTO AS DESC, a.PRECO AS "V.UNIT", A.TOTAL, 
    A.TOTAL/100*A.ALIQUOTAICMS AS "V.ICMS",
    A.ALIQUOTAICMS AS ICMS, B.CUSTOFINANCEIRO AS "C.FINAN",
    B.CUSTOFINANCEIRO-A.ALIQUOTAICMS AS "DIF.ICMS",
    B.MARKUP,a.VALORIPI AS "V.IPI", A.IPI, B.PRECO_VENDA AS "P.VENDA",
    (B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "V.DIF",
    330.34/18 AS "V.PAGO", 
    330.34/18-(B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "DIF.PAGA"

    FROM ENTRADA_PRODUTO a

    inner join PRODUTO B
    ON A.ID_PRODUTO = B.ID

    INNER JOIN ENTRADA D
    ON A.ID_ENTRADA = D.ID

    INNER join PESSOA C
    ON C.ID = D.ID_PESSOA


    where D.ELIMINADO = 'N' AND d.numero like '%10387%' AND C.NOME LIKE '%DECORA%'

    está estou tendo o seguinte resultado


    porém eu preciso usar o maior numero de ORD que neste exemplo é o valor 55, para fazer um calculo. exemplo abaixo em negrito:

    SELECT A.ORDEM AS ORD, B.CODIGO, B.NOME, B.CODIGONCM AS NCM, A.CST, A.CFOP, a.QUANT, 
    A.DESCONTO AS DESC, a.PRECO AS "V.UNIT", A.TOTAL, 
    A.TOTAL/100*A.ALIQUOTAICMS AS "V.ICMS", 
    A.ALIQUOTAICMS AS ICMS, B.CUSTOFINANCEIRO AS "C.FINAN", 
    B.CUSTOFINANCEIRO-A.ALIQUOTAICMS AS "DIF.ICMS",
    B.MARKUP,a.VALORIPI AS "V.IPI", A.IPI, B.PRECO_VENDA AS "P.VENDA", 
    (B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "V.DIF",
    330.34/max(a.ordem) AS "V.PAGO", 
    330.34/max(a.ordem)-(B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "DIF.PAGA"

    FROM ENTRADA_PRODUTO a

    inner join PRODUTO B
    ON A.ID_PRODUTO = B.ID

    INNER JOIN ENTRADA D
    ON A.ID_ENTRADA = D.ID

    INNER join PESSOA C
    ON C.ID = D.ID_PESSOA


    where D.ELIMINADO = 'N' AND d.numero like '%10387%' AND C.NOME LIKE '%DECORA%'

    terça-feira, 4 de setembro de 2018 20:06

Respostas

  • Experimente fazer um teste com a versão abaixo:

    with
        CTE_Orig as
        (
            SELECT 
                A.ORDEM AS ORD, 
                B.CODIGO, 
                B.NOME, 
                B.CODIGONCM AS NCM, 
                A.CST, 
                A.CFOP, 
                a.QUANT, 
                A.DESCONTO AS DESC, 
                a.PRECO AS "V.UNIT", 
                A.TOTAL, 
                A.TOTAL / 100 * A.ALIQUOTAICMS AS "V.ICMS", 
                A.ALIQUOTAICMS AS ICMS, 
                B.CUSTOFINANCEIRO AS "C.FINAN", 
                B.CUSTOFINANCEIRO - A.ALIQUOTAICMS AS "DIF.ICMS",
                B.MARKUP,
                a.VALORIPI AS "V.IPI", 
                A.IPI, 
                B.PRECO_VENDA AS "P.VENDA", 
                (B.CUSTOFINANCEIRO - A.ALIQUOTAICMS) * (A.TOTAL / 100) AS "V.DIF"
            FROM ENTRADA_PRODUTO a
            inner join PRODUTO B
                ON A.ID_PRODUTO = B.ID
            INNER JOIN ENTRADA D
                ON A.ID_ENTRADA = D.ID
            INNER join PESSOA C
                ON C.ID = D.ID_PESSOA
            where 
                D.ELIMINADO = 'N' AND 
                d.numero like '%10387%' AND 
                C.NOME LIKE '%DECORA%'
        ),
    
        CTE_Max as
        (
            select max(ord) as ordem from CTE_Orig
        )
    
    select
        o.*,
        330.34 / m.ordem AS "V.PAGO", 
        330.34 / m.ordem - o."V.DIF" AS "DIF.PAGA"
    from CTE_Orig as o
    cross join CTE_Max as m
    

    Se não funcionar, favor informar a mensagem de erro exibida.

    Espero que ajude


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

    quarta-feira, 5 de setembro de 2018 14:53

Todas as Respostas

  • Olá amigos,

    estou tentando usar o valor maximo de uma coluna para fazer um calculo, mas não estou conseguindo, segue abaixo exemplo.

    SELECT A.ORDEM AS ORD, B.CODIGO, B.NOME, B.CODIGONCM AS NCM, A.CST, A.CFOP, a.QUANT,
    A.DESCONTO AS DESC, a.PRECO AS "V.UNIT", A.TOTAL, 
    A.TOTAL/100*A.ALIQUOTAICMS AS "V.ICMS",
    A.ALIQUOTAICMS AS ICMS, B.CUSTOFINANCEIRO AS "C.FINAN",
    B.CUSTOFINANCEIRO-A.ALIQUOTAICMS AS "DIF.ICMS",
    B.MARKUP,a.VALORIPI AS "V.IPI", A.IPI, B.PRECO_VENDA AS "P.VENDA",
    (B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "V.DIF",
    330.34/18 AS "V.PAGO", 
    330.34/18-(B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "DIF.PAGA"

    FROM ENTRADA_PRODUTO a

    inner join PRODUTO B
    ON A.ID_PRODUTO = B.ID

    INNER JOIN ENTRADA D
    ON A.ID_ENTRADA = D.ID

    INNER join PESSOA C
    ON C.ID = D.ID_PESSOA


    where D.ELIMINADO = 'N' AND d.numero like '%10387%' AND C.NOME LIKE '%DECORA%'

    está estou tendo o seguinte resultado


    porém eu preciso usar o maior numero de ORD que neste exemplo é o valor 55, para fazer um calculo. exemplo abaixo em negrito:

    SELECT A.ORDEM AS ORD, B.CODIGO, B.NOME, B.CODIGONCM AS NCM, A.CST, A.CFOP, a.QUANT, 
    A.DESCONTO AS DESC, a.PRECO AS "V.UNIT", A.TOTAL, 
    A.TOTAL/100*A.ALIQUOTAICMS AS "V.ICMS", 
    A.ALIQUOTAICMS AS ICMS, B.CUSTOFINANCEIRO AS "C.FINAN", 
    B.CUSTOFINANCEIRO-A.ALIQUOTAICMS AS "DIF.ICMS",
    B.MARKUP,a.VALORIPI AS "V.IPI", A.IPI, B.PRECO_VENDA AS "P.VENDA", 
    (B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "V.DIF",
    330.34/max(a.ordem) AS "V.PAGO", 
    330.34/max(a.ordem)-(B.CUSTOFINANCEIRO-A.ALIQUOTAICMS)*(A.TOTAL/100) AS "DIF.PAGA"

    FROM ENTRADA_PRODUTO a

    inner join PRODUTO B
    ON A.ID_PRODUTO = B.ID

    INNER JOIN ENTRADA D
    ON A.ID_ENTRADA = D.ID

    INNER join PESSOA C
    ON C.ID = D.ID_PESSOA


    where D.ELIMINADO = 'N' AND d.numero like '%10387%' AND C.NOME LIKE '%DECORA%'

    *UM CALCULO PARA SER USADO NA MESMA CONSULTA.
    terça-feira, 4 de setembro de 2018 20:16
  • Boa tarde,

    Qual banco de dados você está utilizando? Se for o SQL Server experimente trocar o 

    max(a.ordem)

    por

    max(a.ordem) over()

    Espero que ajude


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

    terça-feira, 4 de setembro de 2018 20:17
  • Boa tarde,

    Qual banco de dados você está utilizando? Se for o SQL Server experimente trocar o 

    max(a.ordem)

    por

    max(a.ordem) over()

    Espero que ajude


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

    ESTOU USANDO FIREBIRD.
    terça-feira, 4 de setembro de 2018 21:10
  • Qual versão?

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

    terça-feira, 4 de setembro de 2018 21:24
  • Experimente mais ou menos dessa forma para ver se funciona:

    with
        CTE_Orig as
        (
            -- query original sem as colunas "V.PAGO" e "DIF.PAGA"
        ),
    
        CTE_Max as
        (
            select max(a.ordem) as ordem from CTE_Orig
        )
    
    select
        o.*,
        330.34 / m.ordem AS "V.PAGO", 
        330.34 / m.ordem - o."V.DIF" AS "DIF.PAGA"
    from CTE_Orig as o
    cross join CTE_Max as m

    Espero que ajude


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

    quarta-feira, 5 de setembro de 2018 12:54
  • não consegui.
    quarta-feira, 5 de setembro de 2018 14:39
  • Experimente fazer um teste com a versão abaixo:

    with
        CTE_Orig as
        (
            SELECT 
                A.ORDEM AS ORD, 
                B.CODIGO, 
                B.NOME, 
                B.CODIGONCM AS NCM, 
                A.CST, 
                A.CFOP, 
                a.QUANT, 
                A.DESCONTO AS DESC, 
                a.PRECO AS "V.UNIT", 
                A.TOTAL, 
                A.TOTAL / 100 * A.ALIQUOTAICMS AS "V.ICMS", 
                A.ALIQUOTAICMS AS ICMS, 
                B.CUSTOFINANCEIRO AS "C.FINAN", 
                B.CUSTOFINANCEIRO - A.ALIQUOTAICMS AS "DIF.ICMS",
                B.MARKUP,
                a.VALORIPI AS "V.IPI", 
                A.IPI, 
                B.PRECO_VENDA AS "P.VENDA", 
                (B.CUSTOFINANCEIRO - A.ALIQUOTAICMS) * (A.TOTAL / 100) AS "V.DIF"
            FROM ENTRADA_PRODUTO a
            inner join PRODUTO B
                ON A.ID_PRODUTO = B.ID
            INNER JOIN ENTRADA D
                ON A.ID_ENTRADA = D.ID
            INNER join PESSOA C
                ON C.ID = D.ID_PESSOA
            where 
                D.ELIMINADO = 'N' AND 
                d.numero like '%10387%' AND 
                C.NOME LIKE '%DECORA%'
        ),
    
        CTE_Max as
        (
            select max(ord) as ordem from CTE_Orig
        )
    
    select
        o.*,
        330.34 / m.ordem AS "V.PAGO", 
        330.34 / m.ordem - o."V.DIF" AS "DIF.PAGA"
    from CTE_Orig as o
    cross join CTE_Max as m
    

    Se não funcionar, favor informar a mensagem de erro exibida.

    Espero que ajude


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

    quarta-feira, 5 de setembro de 2018 14:53
  • CAMPEÃO, FUNCIONOU...

    muito obrigado.

    quarta-feira, 5 de setembro de 2018 18:31