Fórum Consulta SQL #215588
20/02/2004
0
Tabela1 = armazeno saldos encerrados em um periodo(ex.: 2003)
campos: item, cor, tamanho, estoque
Tabela2 = movimento dos itens.
campos: item, cor, tamanho, qtd, tipomovimento, datamovimento
O que eu queria é o seguinte:
Concatenar, juntar as duas tabelas, e classificar a Tabela1 agrupando por
item, cor, tamanho somando o campo estoque.
e a tabela2 agrupar por item, cor, tamanho somando o campo qtd
quando o tipomovimento=´S´ e somando separadamente o campo qtd
quando o tipomovimento=´E´.
O que eu fiz foi o seguinte e deu certo
´Select item, cor, tamanho, sum(qtd) as qtd from Tabela2 where df is null and
datamovimento beetween datai and dataf group by item, cor, tamanho´
Fiz o básico, mas não é isso que eu quero.
Tentei várias outras maneiras, inclusive usando subselect, left join, inner join mas
sempre me retorna uma mensagem indesejada.
Como posso fazer para ter esse resultado?
Desde já agradeço!!!!!
José. :D
Ejose
Curtir tópico
+ 0Posts
20/02/2004
Paulo_amorim
Que tal usar UNION?
eu fiz um aqui que parece funcional...aqui tem a ideia, vc adapta ao teu programa...
dependendo do banco, vc vai precisar por um AS DADOS logo apos os parenteses da SUBQUERY (dar um nome a ela)
SELECT item, cor, tamanho, SUM(estoque), SUM(qtd) FROM( SELECT item, cor, tamanho, SUM(estoque) estoque, NULL qtd FROM Tabela1 GROUP BY item, cor, tamanho UNION SELECT item, cor, tamanho, NULL estoque, SUM(qtd) qtd FROM Tabela2 GROUP BY item, cor, tamanho ) /* aqui vc poe teu nome, se necessario */ GROUP BY item, cor, tamanho
Isso deve funcionar...em Oracle e SQL Server, isso basta!
Até+
Gostei + 0
20/02/2004
Ejose
Em primeiro, Agradeço muito a atenção!!
Esta é a minha consulta na íntegra:
wconsulta := ´Select iditem, iditemcla, iditemtam, iditemdep, id2, sum(estoque), sum(qtd) FROM (´;
wconsulta := wconsulta + ´Select iditem, iditemcla, iditemtam, iditemdep, id2, SUM(estoque) Estoque, NULL qtd FROM EANTERIOR WHERE df is null and empresa=´ + sEmpresa[0] + ´ Group by iditem, iditemcla, iditemtam, iditemdep, id2´;
wconsulta := wconsulta + ´ UNION ´;
wconsulta := wconsulta + ´Select iditem, iditemcla, iditemtam, iditemdep, id2, NULL Estoque, SUM(qtd) qtd FROM EMOVIMENTO WHERE df is null and empresa=´ + sEmpresa[0] + ´ and datal between ´ +#39+datamovi+39+ ´ and ´+39+datamovf+39 + ´ and mov=´ +39+wmove+39 + ´ Group by iditem, iditemcla, iditemtam, iditemdep, id2´;
wconsulta := wconsulta + ´) as Tabdados Group by iditem, iditemcla, iditemtam, iditemdep, id2´;
Me retorna o seguinte erro:
Token unknown - line 1, char 82 Select
Mudei tudo o que podia, mas não deu resultado.
Gostei + 0
20/02/2004
Sremulador
Gostei + 0
21/02/2004
Ejose
Obrigado pela dica
:D
Ocorreu o mesmo erro.
Será que o problema não é de sintaxe, da maneira como estou usando o Select?
José.
Gostei + 0
21/02/2004
Everton
select T1.Item, T1.Cor, T1.Tamanho, sum(T1.estoque) as Estoque,
(select sum(T2.qtd) from TABELA2 T2
where T1.item = T2.item
and T1.cor = T2.cor
and T1.tamanho = T2.tamanho
and T2.tipomovimento = ´E´
and T2.datamovimento >=:DataInicial
and T2.datamovimento <=:DataFinal) as Entrada,
(select sum(T2.qtd) from TABELA2 T2
where T1.item = T2.item
and T1.cor = T2.cor
and T1.tamanho = T2.tamanho
and T2.tipomovimento = ´S´
and T2.datamovimento >=:DataInicial
and T2.datamovimento <=:DataFinal) as Saida
from TABELA1 T1
group by T1.Item, T1.Cor, T1.Tamanho
Espero que seja isto que esteja procurando.
[].
Gostei + 0
21/02/2004
Ejose
:D
Everton, a sua dica funcionou certinho. Obrigado pela sua atenção!!
Só que não mostrou o que está em * na explicação abaixo.
Tentei fazer algumas mudanças no código, mas não resolveu.
Tabela1 - Estoques encerrado em 31/12/2003
Item cor tamanho estoque
159 159 G 20
159 159 P 10
159 159 12 1
159 100 G 10
Tabela2 - Movimento período: 01/01/2004 à 20/02/2004
Item cor tamanho qtd tipomovimento
159 159 G 10 E
159 159 G 5 S
159 159 G 2 S
159 159 G 5 S
159 159 M 50 E ****
A consulta deveria mostrar:
Item cor tamanho estoque Entradas Saidas
159 159 G 20 10 12
159 159 P 10 0 0
159 159 12 1 0 0
159 100 G 10 0 0
159 159 M 0 50 0 ****
**** Observe que o movimento não se encontra na Tabela1(saldo anterior).
- A minha tabela de itens eu só cadastro o Item ex.: 159 - BÁSICA FEMININA
a Cor e o tamanho, eu tenho tabelas, mas eu só controlo em movimento.
- Tenho Sistema assim em Clipper.
Claro, que existe muito mais coisas, como custos, outros, mas se
conseguir resolver isso será 99¬.
Obrigado!!!
José.
Gostei + 0
21/02/2004
Everton
SELECT T2.ITEM, T2.COR, T2.TAMANHO,
(SELECT SUM(T1.ESTOQUE) FROM tabela1 T1
WHERE T1.ITEM = T2.ITEM
AND T1.COR = T2.COR
AND T1.TAMANHO = T2.TAMANHO) AS ESTOQUE,
(SELECT SUM(T3.QTD) FROM tabela2 T3
WHERE T3.TIPOMOVIMENTO = ´E´
AND T3.ITEM = T2.ITEM
AND T3.COR = T2.COR
AND T3.TAMANHO = T2.TAMANHO) AS ENTRADA,
(SELECT SUM(T4.QTD) FROM tabela2 T4
WHERE T4.TIPOMOVIMENTO = ´S´
AND T4.ITEM = T2.ITEM
AND T4.COR = T2.COR
AND T4.TAMANHO = T2.TAMANHO) AS SAIDA
FROM TABELA2 T2
UNION
SELECT T1.ITEM, T1.COR, T1.TAMANHO,
(SELECT SUM(T2.ESTOQUE) FROM tabela1 T2
WHERE T2.ITEM = T1.ITEM
AND T2.COR = T1.COR
AND T2.TAMANHO = T1.TAMANHO) AS ESTOQUE,
(SELECT SUM(T3.QTD) FROM tabela2 T3
WHERE T3.TIPOMOVIMENTO = ´E´
AND T3.ITEM = T1.ITEM
AND T3.COR = T1.COR
AND T3.TAMANHO = T1.TAMANHO) AS ENTRADA,
(SELECT SUM(T4.QTD) FROM tabela2 T4
WHERE T4.TIPOMOVIMENTO = ´S´
AND T4.ITEM = T1.ITEM
AND T4.COR = T1.COR
AND T4.TAMANHO = T1.TAMANHO) AS SAIDA
FROM TABELA1 T1
Espero que dessa vez dê certo. [].
Gostei + 0
25/02/2004
Ejose
DEU CERTO!!!!!!!!!!! :D
OBRIGADO!!!!!!!!!!
A única diferença que ajustei foi depois do UNION, o alias T2 retornou
erro que estava duplicado ou parecido, daí mudei para outro nome e funcionou.
Minha consulta ficou mais ou menos assim:
wconsulta := ´Select T2.Iditem, T2.Iditemcla, T2.Iditemtam, T2.Iditemdep, T2.Id2, T9.Iditem, T9.Descricao, ´;
wconsulta := wconsulta + ´(Select sum(T1.estoque) from EANTERIOR T1 ´;
wconsulta := wconsulta + ´WHERE T1.df is null and T1.empresa>=´ + sEmpresa[0] + ´ and T1.empresa<=´+ sEmpresa[1] +´ and ´;
wconsulta := wconsulta + ´T1.Exercicio = ´+#39+Exercicio+39+´ and ´;
wconsulta := wconsulta + ´T1.Balanco = ´+39+Balanco+39+´ and ´;
wconsulta := wconsulta + ´T1.Iditem = T2.Iditem and ´;
wconsulta := wconsulta + ´T1.Iditemcla = T2.Iditemcla and ´;
wconsulta := wconsulta + ´T1.Iditemtam = T2.Iditemtam and ´;
wconsulta := wconsulta + ´T1.Iditemdep = T2.Iditemdep and ´;
wconsulta := wconsulta + ´T1.Id2 = T2.Id2) as Estoque, ´;
wconsulta := wconsulta + ´(Select sum(T3.qtd) from EMOVITEM T3 ´;
wconsulta := wconsulta + ´WHERE T3.df is null and ´;
wconsulta := wconsulta + ´T3.empresa>=´ + sEmpresa[0] + ´ and T3.empresa<=´+ sEmpresa[1] + ´ and ´;
wconsulta := wconsulta + ´T3.datal between ´ +#39+datamovi+39+ ´ and ´+39+datamovf+39 + ´ and ´;
wconsulta := wconsulta + ´T3.mov=´ +39+wmovE+39 + ´ and ´;
wconsulta := wconsulta + ´T3.Iditem = T2.Iditem and ´;
wconsulta := wconsulta + ´T3.Iditemcla = T2.Iditemcla and ´;
wconsulta := wconsulta + ´T3.Iditemtam = T2.Iditemtam and ´;
wconsulta := wconsulta + ´T3.Iditemdep = T2.Iditemdep and ´;
wconsulta := wconsulta + ´T3.Id2 = T2.Id2) as Entradas, ´;
wconsulta := wconsulta + ´(Select sum(T4.qtd) from EMOVITEM T4 ´;
wconsulta := wconsulta + ´WHERE T4.df is null and ´;
wconsulta := wconsulta + ´T4.empresa>=´ + sEmpresa[0] + ´ and T4.empresa<=´+ sEmpresa[1] + ´ and ´;
wconsulta := wconsulta + ´T4.datal between ´ +#39+datamovi+39+ ´ and ´+39+datamovf+39 + ´ and ´;
wconsulta := wconsulta + ´T4.mov=´ +39+wmovS+39 + ´ and ´;
wconsulta := wconsulta + ´T4.Iditem = T2.Iditem and ´;
wconsulta := wconsulta + ´T4.Iditemcla = T2.Iditemcla and ´;
wconsulta := wconsulta + ´T4.Iditemtam = T2.Iditemtam and ´;
wconsulta := wconsulta + ´T4.Iditemdep = T2.Iditemdep and ´;
wconsulta := wconsulta + ´T4.Id2 = T2.Id2) as Saidas ´;
wconsulta := wconsulta + ´FROM EMOVITEM T2, EITEMA T9 WHERE ´;
wconsulta := wconsulta + ´T2.Iditem = T9.Iditem and T2.id2 >= ´+39+wid2i+39+ ´ and T2.id2 <= ´+39+wid2f+39;
if Iditemtam <> ´´ then begin
wconsulta := wconsulta + ´ and T2.Iditemtam = ´+39+iditemtam+39;
end;
wconsulta := wconsulta + ´ UNION ´;
wconsulta := wconsulta + ´Select T1.Iditem, T1.Iditemcla, T1.Iditemtam, T1.Iditemdep, T1.Id2, T8.Iditem, T8.Descricao, ´;
wconsulta := wconsulta + ´(Select sum(T5.estoque) from EANTERIOR T5 ´;
wconsulta := wconsulta + ´WHERE T5.df is null and T5.empresa>=´ + sEmpresa[0] + ´ and T2.empresa<=´+ sEmpresa[1] +´ and ´;
wconsulta := wconsulta + ´T5.Exercicio = ´+#39+Exercicio+39+´ and ´;
wconsulta := wconsulta + ´T5.Balanco = ´+39+Balanco+39+´ and ´;
wconsulta := wconsulta + ´T5.Iditem = T1.Iditem and ´;
wconsulta := wconsulta + ´T5.Iditemcla = T1.Iditemcla and ´;
wconsulta := wconsulta + ´T5.Iditemtam = T1.Iditemtam and ´;
wconsulta := wconsulta + ´T5.Iditemdep = T1.Iditemdep and ´;
wconsulta := wconsulta + ´T5.Id2 = T1.Id2) as Estoque, ´;
wconsulta := wconsulta + ´(Select sum(T3.qtd) from EMOVITEM T3 ´;
wconsulta := wconsulta + ´WHERE T3.df is null and ´;
wconsulta := wconsulta + ´T3.empresa>=´ + sEmpresa[0] + ´ and T3.empresa<=´+ sEmpresa[1] + ´ and ´;
wconsulta := wconsulta + ´T3.datal between ´ +#39+datamovi+39+ ´ and ´+39+datamovf+39 + ´ and ´;
wconsulta := wconsulta + ´T3.mov=´ +39+wmovE+39 + ´ and ´;
wconsulta := wconsulta + ´T3.Iditem = T1.Iditem and ´;
wconsulta := wconsulta + ´T3.Iditemcla = T1.Iditemcla and ´;
wconsulta := wconsulta + ´T3.Iditemtam = T1.Iditemtam and ´;
wconsulta := wconsulta + ´T3.Iditemdep = T1.Iditemdep and ´;
wconsulta := wconsulta + ´T3.Id2 = T1.Id2) as Entradas, ´;
wconsulta := wconsulta + ´(Select sum(T4.qtd) from EMOVITEM T4 ´;
wconsulta := wconsulta + ´WHERE T4.df is null and ´;
wconsulta := wconsulta + ´T4.empresa>=´ + sEmpresa[0] + ´ and T4.empresa<=´+ sEmpresa[1] + ´ and ´;
wconsulta := wconsulta + ´T4.datal between ´ +#39+datamovi+39+ ´ and ´+39+datamovf+39 + ´ and ´;
wconsulta := wconsulta + ´T4.mov=´ +39+wmovS+39 + ´ and ´;
wconsulta := wconsulta + ´T4.Iditem = T1.Iditem and ´;
wconsulta := wconsulta + ´T4.Iditemcla = T1.Iditemcla and ´;
wconsulta := wconsulta + ´T4.Iditemtam = T1.Iditemtam and ´;
wconsulta := wconsulta + ´T4.Iditemdep = T1.Iditemdep and ´;
wconsulta := wconsulta + ´T4.Id2 = T1.Id2) as Saidas ´;
wconsulta := wconsulta + ´FROM EANTERIOR T1, EITEMA T8 WHERE ´;
wconsulta := wconsulta + ´T1.Iditem = T8.Iditem and T1.id2 >= ´+39+wid2i+39+ ´ and T1.id2 <= ´+39+wid2f+39;
if Iditemtam <> ´´ then begin
wconsulta := wconsulta + ´ and T1.Iditemtam = ´+39+Iditemtam+39;
end;
José.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)