none
Select dentro de Select RRS feed

  • Pergunta

  • Senhores,

    Como faço um select dentro de outro no sql server?

    Tenho as seguintes queries e queria colocar em uma so....

     

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaComb,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoComb,

    ISNULL(SUM(PrecoBomba), 0) AS PrecoVendaComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoBomba), 0) AS TotalVendaComb,

    FROM ControleEstoqueCombustivel

    WHERE

    (Data = '2007/07/01') AND (IdPosto = 7)AND (VendaDoDia != 0)

    GROUP BY Data

     

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaMerc,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoMerc,

    ISNULL(SUM(PrecoPista), 0) AS PrecoVendaMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoPista), 0) AS TotalVendaMerc

    FROM ControleEstoqueMercadoria

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)AND (VendaDoDia != 0)

    GROUP BY Data

    SELECT

    Data,

    ISNULL(SUM(Total), 0) AS TotalDespesas

    FROM Despesas

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)

    GROUP BY Data

    sábado, 28 de julho de 2007 23:15

Respostas

  •  

    Desculpa, eu não tinha entendido exaaaaatamente o que você deseja.

     

    Você pode tentar assim:

     

    Code Snippet

     

    SELECT * FROM (

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaComb,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoComb,

    ISNULL(SUM(PrecoBomba), 0) AS PrecoVendaComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoBomba), 0) AS TotalVendaComb,

    NULL AS TotalDespesas

    FROM ControleEstoqueCombustivel

    WHERE (Data = '2007/07/01') AND (IdPosto = 7)AND (VendaDoDia != 0)

    GROUP BY Data

    UNION

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaMerc,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoMerc,

    ISNULL(SUM(PrecoPista), 0) AS PrecoVendaMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoPista), 0) AS TotalVendaMerc,

    NULL AS TotalDespesas

    FROM ControleEstoqueMercadoria

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)AND (VendaDoDia != 0)

    )AS TBL

    GROUP BY Data

    UNION

    SELECT

    Data,

    NULL,

    NULL,

    NULL,

    NULL,

    NULL,

    ISNULL(SUM(Total), 0) AS TotalDespesas

    FROM Despesas

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)

    GROUP BY Data

    ORDER BY TotalDespesas

     

     

     

    Dessa forma você conseguirá unir o resultado dos dois primeiros SELECTs. Só notei que no primeiro SELECT, está sendo passada a data fixa, terá que mudar para a variável desejada, assim também para o IdPosto.

     

    Veja se resolve. Qualquer coisa retorne.

     

     

    Abraço

    segunda-feira, 30 de julho de 2007 14:00

Todas as Respostas

  •  

    Olá!

     

    Não sei se é exatamente assim que você deseja, mas deve resolver seu problema:

     

    Code Snippet

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaComb,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoComb,

    ISNULL(SUM(PrecoBomba), 0) AS PrecoVendaComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoBomba), 0) AS TotalVendaComb,

    NULL AS TotalDespesas

    FROM ControleEstoqueCombustivel

    WHERE (Data = '2007/07/01') AND (IdPosto = 7)AND (VendaDoDia != 0)

    GROUP BY Data

    UNION

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaMerc,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoMerc,

    ISNULL(SUM(PrecoPista), 0) AS PrecoVendaMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoPista), 0) AS TotalVendaMerc,

    NULL AS TotalDespesas

    FROM ControleEstoqueMercadoria

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)AND (VendaDoDia != 0)

    GROUP BY Data

    UNION

    SELECT

    Data,

    NULL,

    NULL,

    NULL,

    NULL,

    NULL,

    ISNULL(SUM(Total), 0) AS TotalDespesas

    FROM Despesas

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)

    GROUP BY Data

    ORDER BY Ordenacao

     

     

    Apenas coloquei um UNION e adicionei colunas para deixar todas consultas com o mesmo número de colunas.

     

     

    Abraço

    domingo, 29 de julho de 2007 00:52
  • Grande Alexandre!

    Pois é meu caro....com o union cai no mesmo problema aqui quando tentei com JOIN..ele so mostra o resultado do primeiro select.

    Na verdade preciso de todos esse somatorios na tela....

    Mas tudo bem...ajudou!

     

    Abs,

     

    segunda-feira, 30 de julho de 2007 13:42
  •  

    Desculpa, eu não tinha entendido exaaaaatamente o que você deseja.

     

    Você pode tentar assim:

     

    Code Snippet

     

    SELECT * FROM (

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaComb,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoComb,

    ISNULL(SUM(PrecoBomba), 0) AS PrecoVendaComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoComb,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoBomba), 0) AS TotalVendaComb,

    NULL AS TotalDespesas

    FROM ControleEstoqueCombustivel

    WHERE (Data = '2007/07/01') AND (IdPosto = 7)AND (VendaDoDia != 0)

    GROUP BY Data

    UNION

    SELECT

    Data,

    ISNULL(SUM(VendaDoDia), 0) AS VendaDiaMerc,

    ISNULL(SUM(CustoMedio), 0) AS PrecoCustoMerc,

    ISNULL(SUM(PrecoPista), 0) AS PrecoVendaMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(CustoMedio), 0) AS TotalCustoMerc,

    ISNULL(SUM(VendaDoDia), 0) * ISNULL(SUM(PrecoPista), 0) AS TotalVendaMerc,

    NULL AS TotalDespesas

    FROM ControleEstoqueMercadoria

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)AND (VendaDoDia != 0)

    )AS TBL

    GROUP BY Data

    UNION

    SELECT

    Data,

    NULL,

    NULL,

    NULL,

    NULL,

    NULL,

    ISNULL(SUM(Total), 0) AS TotalDespesas

    FROM Despesas

    WHERE (Data = @Data) AND (IdPosto = @IdPosto)

    GROUP BY Data

    ORDER BY TotalDespesas

     

     

     

    Dessa forma você conseguirá unir o resultado dos dois primeiros SELECTs. Só notei que no primeiro SELECT, está sendo passada a data fixa, terá que mudar para a variável desejada, assim também para o IdPosto.

     

    Veja se resolve. Qualquer coisa retorne.

     

     

    Abraço

    segunda-feira, 30 de julho de 2007 14:00
  • Show de bola Alexandre!

     

    Obrigadissimo!!

     

    Abs,

    quarta-feira, 1 de agosto de 2007 13:29