Usuário com melhor resposta
Select dentro de Select

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 DataSELECT
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 SELECTData
, ISNULL(SUM(Total), 0) AS TotalDespesas FROM Despesas WHERE (Data = @Data) AND (IdPosto = @IdPosto) GROUP BY Data
Respostas
-
Desculpa, eu não tinha entendido exaaaaatamente o que você deseja.
Você pode tentar assim:
Code SnippetSELECT
* FROM ( SELECTData
, 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 SELECTData
, 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 TBLGROUP
BY DataUNION
SELECT
Data
,NULL,
NULL,
NULL,
NULL,
NULL,
ISNULL
(SUM(Total), 0) AS TotalDespesasFROM
DespesasWHERE
(Data = @Data) AND (IdPosto = @IdPosto)GROUP
BY DataORDER
BY TotalDespesasDessa 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
Todas as Respostas
-
Olá!
Não sei se é exatamente assim que você deseja, mas deve resolver seu problema:
Code SnippetSELECT
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 TotalDespesasFROM
ControleEstoqueCombustivelWHERE
(Data = '2007/07/01') AND (IdPosto = 7)AND (VendaDoDia != 0)GROUP
BY DataUNION
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 TotalDespesasFROM
ControleEstoqueMercadoriaWHERE
(Data = @Data) AND (IdPosto = @IdPosto)AND (VendaDoDia != 0)GROUP
BY DataUNION
SELECT
Data
,NULL,
NULL,
NULL,
NULL,
NULL,
ISNULL
(SUM(Total), 0) AS TotalDespesasFROM
DespesasWHERE
(Data = @Data) AND (IdPosto = @IdPosto)GROUP
BY DataORDER
BY OrdenacaoApenas coloquei um UNION e adicionei colunas para deixar todas consultas com o mesmo número de colunas.
Abraço
-
-
Desculpa, eu não tinha entendido exaaaaatamente o que você deseja.
Você pode tentar assim:
Code SnippetSELECT
* FROM ( SELECTData
, 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 SELECTData
, 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 TBLGROUP
BY DataUNION
SELECT
Data
,NULL,
NULL,
NULL,
NULL,
NULL,
ISNULL
(SUM(Total), 0) AS TotalDespesasFROM
DespesasWHERE
(Data = @Data) AND (IdPosto = @IdPosto)GROUP
BY DataORDER
BY TotalDespesasDessa 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
-