none
Reaproveitando o resultado de uma sub-query no mesmo SQL RRS feed

  • Pergunta

  • Como eu posso utilizar o resultado de uma sub query, em uma operação aritmetica?

    Select T1.campo1, T1.campo2, T1.campo3,
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) as "Sub Total", 
       T1.Campo5 + T1.campo6 as "Saldo" 
    From T1;

    Eu Gostaria de pegar o "Sub Total" e somar com o "Saldo". Eu consigo fazer isso desta forma

    Select T1.campo1, T1.campo2, T1.campo3,
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) as "Sub Total", 
       T1.Campo5 + T1.campo6 as "Saldo",
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) + T1.campo5 + T1.Campo6 as Total
    From T1

    No entando, tenho que repetir a sub-query, acredito que haja alguma maneira de utilizar o valor retornado pela primeira sub-query, para não precisar executar duas sub-query exatamente iguais.

    Alguem conhece outra forma?

    Atenciosamente,

    Rodrigo


    • Editado Vollo quarta-feira, 28 de março de 2012 15:15
    quarta-feira, 28 de março de 2012 15:14

Respostas

  • Vollo,

    Você não conseguira o subtotal, pois a ordem que o sql executa as consultas é a seguinte:

    01 – Junção das tabelas especificadas na cláusula FROM
    02 – Filtro dos registros baseados na cláusula WHERE
    03 – Sumarização baseada na cláusula GROUP BY
    04 – Filtro dos registros baseados na cláusula HAVING
    05 – Exibição das colunas especificadas na cláusula SELECT
    06 – Ordenação dos dados conforme os critérios da cláusula ORDER BY

    O que você poderá fazer é uma sub-query co-relacionada.

    Ficaria da seguinte forma:

    SELECT SQL.SUBTOTAL, (SQL.SUBTOTAL + SQL.SALDO) AS TOTAL FROM (
    
    Select T1.campo1, T1.campo2, T1.campo3,
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) as SubTotal, 
       T1.Campo5 + T1.campo6 as Saldo
    From T1) SQL

    Se útil, Classifique

    Abraços;



    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    • Editado DhiegoPiroto quarta-feira, 28 de março de 2012 15:56
    • Marcado como Resposta Vollo quarta-feira, 28 de março de 2012 16:44
    quarta-feira, 28 de março de 2012 15:55

Todas as Respostas

  • Vollo,

    Você não conseguira o subtotal, pois a ordem que o sql executa as consultas é a seguinte:

    01 – Junção das tabelas especificadas na cláusula FROM
    02 – Filtro dos registros baseados na cláusula WHERE
    03 – Sumarização baseada na cláusula GROUP BY
    04 – Filtro dos registros baseados na cláusula HAVING
    05 – Exibição das colunas especificadas na cláusula SELECT
    06 – Ordenação dos dados conforme os critérios da cláusula ORDER BY

    O que você poderá fazer é uma sub-query co-relacionada.

    Ficaria da seguinte forma:

    SELECT SQL.SUBTOTAL, (SQL.SUBTOTAL + SQL.SALDO) AS TOTAL FROM (
    
    Select T1.campo1, T1.campo2, T1.campo3,
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) as SubTotal, 
       T1.Campo5 + T1.campo6 as Saldo
    From T1) SQL

    Se útil, Classifique

    Abraços;



    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    • Editado DhiegoPiroto quarta-feira, 28 de março de 2012 15:56
    • Marcado como Resposta Vollo quarta-feira, 28 de março de 2012 16:44
    quarta-feira, 28 de março de 2012 15:55
  • Vollo,

    Você não conseguira o subtotal, pois a ordem que o sql executa as consultas é a seguinte:

    01 – Junção das tabelas especificadas na cláusula FROM
    02 – Filtro dos registros baseados na cláusula WHERE
    03 – Sumarização baseada na cláusula GROUP BY
    04 – Filtro dos registros baseados na cláusula HAVING
    05 – Exibição das colunas especificadas na cláusula SELECT
    06 – Ordenação dos dados conforme os critérios da cláusula ORDER BY

    O que você poderá fazer é uma sub-query co-relacionada.

    Ficaria da seguinte forma:

    SELECT SQL.SUBTOTAL, (SQL.SUBTOTAL + SQL.SALDO) AS TOTAL FROM (
    
    Select T1.campo1, T1.campo2, T1.campo3,
             (select sum(T2.campo4) from T2 where T1.campo1 = T2.Campo1) as SubTotal, 
       T1.Campo5 + T1.campo6 as Saldo
    From T1) SQL

    Se útil, Classifique

    Abraços;



    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com


    Valeu brother... já tinha me esquecido que poderia usar uma sub-query na clausula FROM. É o que eu precisava!

    Obrigado pela ajuda.

    At+

    quarta-feira, 28 de março de 2012 16:44