Usuário com melhor resposta
Cálculos entre subquery

Pergunta
-
Pesoal na query abaixo tenho algumas subquery as quias dou um alias para elas estou obtendo os resultados corretamente porem precisava fazer alguns calculos entre os resultados destas subqueryes sei que posos fazer usando as mesas subqueries mas preciso popupar linhas de código é possível?
preciso fazer tipo assim:
Tenho uma subquery que dei o alias dela de SOMAE e outra SOMAS preciso fazer tipo (SOMAE - SOMAS) * ESi.Qtde 'SALDO_ATUAL'
Segue a query:
;WITH CTE AS ( SELECT ROW_NUMBER() OVER (ORDER BY X.NF, X.DATA) as ID, X.* FROM ( SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, ESI.V_Total AS V_Total FROM dbo.Entrada_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00') UNION SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, -ESI.Qtde AS Qtde, -ESI.V_Unitario AS V_Unitario, -ESI.V_Total AS V_Total FROM dbo.Saida_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND'2007-12-31 00:00:00') ) AS X ) SELECT *, --SOMA qtd de entadas no periodo (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00') ) AS SOMAE, --Total entradas no estoque (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')) AS SOMAET, --SOMA SAIDAS no Periodo (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00') ) AS SOMAS, --- Total de SAIDAS no estoque (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322')AND (ESI.Cod_Empresa = '1')) AS SOMAST, --Quantidade de saidas antés do periodo (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada < '2007-07-31 00:00:00') ) AS SAP, ----- ----ENTRADAS ANTES DO PERIODO (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00') ) AS EAP, ----- ---- pReciso fazer algo tipo (EAP - SAp_ * ESI.Qtde 'SALDO' ValorAcumulado = (SELECT SUM(V_Total) FROM CTE WHERE ID <= C.ID) FROM CTE AS C
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer
Respostas
-
Resolvi assim ficou com mais linhas mais deu certo:
;WITH CTE AS ( SELECT ROW_NUMBER() OVER (ORDER BY X.NF, X.DATA) as ID, X.* FROM ( SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, ESI.V_Total AS V_Total FROM dbo.Entrada_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00') UNION SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, -ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, -ESI.V_Total AS V_Total FROM dbo.Saida_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND'2007-12-31 00:00:00') ) AS X ) SELECT *, --SOMA qtd de entadas no periodo (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00')) AS V_SE, --Total entradas no estoque (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00'))*(V_Unitario) AS V_SEV, --SOMA SAIDAS no Periodo (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00')) AS V_SS, --- Total de SAIDAS no estoque (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00'))*(V_Unitario) AS V_SSV, ----ENTRADAS ANTES DO PERIODO ((SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00')) - (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada < '2007-07-31 00:00:00'))) AS V_DQ, ---- Disponivel no estroque antes do periodo ((SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00')) - (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada < '2007-07-31 00:00:00')))*(V_Unitario) AS V_DV, ----- V_Acum = (SELECT SUM(V_Total) FROM CTE WHERE ID <= C.ID) FROM CTE AS C
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer- Marcado como Resposta Moizés Cerqueira quarta-feira, 29 de dezembro de 2010 15:44
Todas as Respostas
-
Moizes,
O que você esta querendo fazer, armazenar estes resultados em alguma table?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com] -
Já trago os resultados corretamente que preciso, é pegar os valores que fiz e poder fazer caluclos entre eles yipo aasim:
select Descricao, Qtde, NF, Cod_Estoque, Cod_Produto, Cod_Empresa, Data, V_Unitario, V_Total, SOMAE, SOMAS, SOMAE-SOMAS 'SOMAES', SOMAE * V_Unitario 'QTE', SOMAS * -V_Unitario 'QtS', SOMAET, SOMAST, SOMAET-SOMAST 'QTES', (SOMAET - SOMAST)*(V_Unitario) 'VES' from ( SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, ESI.V_Total AS V_Total, --SOMA qtd de entadas no periodo (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2010-12-31 00:00:00') ) AS SOMAE, --Total entradas no estoque (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')) AS SOMAET, --SOMA SAIDAS no Periodo (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2010-12-31 00:00:00') ) AS SOMAS, --- Total de SAIDAS no estoque (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322')AND (ESI.Cod_Empresa = '1')) AS SOMAST FROM dbo.Entrada_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2010-12-31 00:00:00') )x
Se vc observar na query da pergunta inical tenho um union e não consigo fazer como esta query se vc observar tenho alguns calculos :
SOMAE-SOMAS 'SOMAES', SOMAE * V_Unitario 'QTE', SOMAS * -V_Unitario 'QtS', SOMAET, SOMAST, SOMAET-SOMAST 'QTES', (SOMAET - SOMAST)*(V_Unitario) 'VES'
É algo semelhante que preciso.
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer -
Moizés,
Mas qual valores você se refere, seria os resultados dos cálculos para depois realizar outros cálculos?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com] -
Exato, repare que tenho algumas subquery que faço somas, tipo:
----ENTRADAS ANTES DO PERIODO (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00') ) AS EAP, -----
Ai por exemplo queria pegar o resultado desta e somar com o resultado de outra, tipo resultado de EAP + resultado de SAP.
Ficou mais claro?
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer -
Moizés,
Cara entendi, então antes do Select você poderá realizar um Insert Into deste Select para uma table, ou então declarar variáveis e armazenar os valores nestas variáveis.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com] -
Moízes,
Um detalhe importante a table ou variáveis devem ter a mesma estrutura dos dados que estão sendo processados na query.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com] -
Tem algum exemplo? programção em SQL não é meu forte, estou criando um modulo num projeto em vb6 e por isso parti pros calculos direto no SQL, pois minha especialidade é .NET já fiz algo parecido mais foi num projeto em entity framework e LINQ e resolvi facilmente porem não tenho amplo dominio em SQL e VB por isso estou recorendo ao auxilio dos colegas com mais experiencia em SQL. Se pusder me mostrar um exemplo eu agradeço.
Att.
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer -
Resolvi assim ficou com mais linhas mais deu certo:
;WITH CTE AS ( SELECT ROW_NUMBER() OVER (ORDER BY X.NF, X.DATA) as ID, X.* FROM ( SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, ESI.V_Total AS V_Total FROM dbo.Entrada_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00') UNION SELECT P.Descricao AS Descricao, ESI.Id_Doc AS NF, ESI.Cod_Estoque AS Cod_Estoque, ESI.Cod_Produto AS Cod_Produto, ESI.Cod_Empresa AS Cod_Empresa, S.Dta_Entrada AS Data, -ESI.Qtde AS Qtde, ESI.V_Unitario AS V_Unitario, -ESI.V_Total AS V_Total FROM dbo.Saida_Itens AS ESI INNER JOIN dbo.Produtos AS P ON ESI.Cod_Empresa = P.Cod_Empresa AND ESI.Cod_Estoque = P.Cod_Estoque AND ESI.Cod_Produto = P.Cod_Produto INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND'2007-12-31 00:00:00') ) AS X ) SELECT *, --SOMA qtd de entadas no periodo (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00')) AS V_SE, --Total entradas no estoque (SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00'))*(V_Unitario) AS V_SEV, --SOMA SAIDAS no Periodo (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00')) AS V_SS, --- Total de SAIDAS no estoque (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada Between '2007-07-31 00:00:00' AND '2007-12-31 00:00:00'))*(V_Unitario) AS V_SSV, ----ENTRADAS ANTES DO PERIODO ((SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00')) - (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada < '2007-07-31 00:00:00'))) AS V_DQ, ---- Disponivel no estroque antes do periodo ((SELECT SUM(ESI.Qtde) FROM Entrada_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1')AND (S.Dta_Entrada < '2007-07-31 00:00:00')) - (SELECT SUM(ESI.Qtde) FROM Saida_Itens AS ESI INNER JOIN dbo.Saida AS S ON ESI.Cod_Empresa = S.Cod_Empresa AND ESI.Id_Doc = S.Id_Doc WHERE (ESI.Cod_Estoque = '01') AND (ESI.Cod_Produto = '00322') AND (ESI.Cod_Empresa = '1') AND (S.Dta_Entrada < '2007-07-31 00:00:00')))*(V_Unitario) AS V_DV, ----- V_Acum = (SELECT SUM(V_Total) FROM CTE WHERE ID <= C.ID) FROM CTE AS C
Moizés Cerqueira | MCP
Site: www.moizes.cerqueira.nom.br
Twitter: @moicer- Marcado como Resposta Moizés Cerqueira quarta-feira, 29 de dezembro de 2010 15:44
-
Moizés,
Desculpe-me pela demora, que bom que você consegui resolver utilizando CTE.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]