Página 1 de 1
Problema - GROUP BY com JOIN
Enviado: Seg, 23 Jun 2008 11:49 am
por marquesjr
Pessoal o select abaixo não rodou, elaborei o select para agrupar (por produto) a soma das quantidades em estoque (antes do inventário, que estão separada por lote) com o estoque após o inventário.
Se alguém poder dá um força...
Selecionar tudo
SELECT
A.CD_CONTAGEM,
A.CD_PRODUTO,
SUM(A.QT_ESTOQUE) AS QT_ANTERIOR,
B.QT_ESTOQUE AS QT_ATUAL
FROM
DBAMV.COPIA_ESTOQUE A
LEFT OUTER JOIN
DBAMV.ITCONTAGEM B
ON
(
A.CD_CONTAGEM = B.CD_CONTAGEM
)
AND
(
A.CD_PRODUTO = B.CD_PRODUTO
)
WHERE
A.CD_CONTAGEM = 2189
GROUP BY
A.CD_CONTAGEM,
A.CD_PRODUTO
ORDER BY
A.CD_PRODUTO ASC;
Enviado: Seg, 23 Jun 2008 12:04 pm
por Trevisolli
Brother,
Verifiquei que você não fez o agrupamento (Group by), pela coluna:
A query te retornou um erro? Poderia postar pra gente?
Enviado: Seg, 23 Jun 2008 12:10 pm
por vetis
Marques,
Não conseguir entender que informação você pretender conseguir atravez desse script.
Selecionar tudo
SELECT
A.CD_CONTAGEM,
A.CD_PRODUTO,
-- Que informação você está localizando, como uma mesma coluna tem a contidade de estoque atual e anterior. --
SUM(A.QT_ESTOQUE) AS QT_ANTERIOR,
B.QT_ESTOQUE AS QT_ATUAL
--------------------------------------------------------------------------------------
FROM
DBAMV.COPIA_ESTOQUE A
LEFT OUTER JOIN
DBAMV.ITCONTAGEM B
-- Nessa parte não é necessário colocar os parentes neste caso --
ON
(
A.CD_CONTAGEM = B.CD_CONTAGEM
)
AND
(
A.CD_PRODUTO = B.CD_PRODUTO
)
WHERE
A.CD_CONTAGEM = 2189
-- Falta agrupar coluna B.QT_ESTOQUE para funcionar a soma que está na linha acima dela --
GROUP BY
A.CD_CONTAGEM,
A.CD_PRODUTO
ORDER BY
A.CD_PRODUTO ASC;
Passe mais informações para poder te ajudar !!
Att,
Enviado: Seg, 23 Jun 2008 1:26 pm
por marquesjr
Bem, para ficar claro postei abaixo uma imagem contendo as duas tabela da consulta e a tabela resultante que quero:
Vetis e Trevisolli, adicionei a coluna B.QT_ESTOQUE ao agrupamento (Group by), o código funcionou, mas ficaram alguma informações em branco:
[/url]
Enviado: Seg, 23 Jun 2008 1:28 pm
por marquesjr
Opa ajeitando o código:
Bem, para ficar claro postei abaixo uma imagem contendo as duas tabela da consulta e a tabela resultante que quero:
Vetis e Trevisolli, adicionei a coluna B.QT_ESTOQUE ao agrupamento (Group by), o código funcionou, mas ficaram alguma informações em branco:
Enviado: Seg, 23 Jun 2008 1:31 pm
por marquesjr
Opa ajeitando o código:
Bem, para ficar claro postei abaixo uma imagem contendo as duas tabela da consulta e a tabela resultante que quero:
Vetis e Trevisolli, adicionei a coluna B.QT_ESTOQUE ao agrupamento (Group by), o código funcionou, mas ficaram alguma informações em branco:
Enviado: Seg, 23 Jun 2008 1:32 pm
por vetis
Marques,
Não poderia te ajudar neste momento, pois o firewall da empresa bloqueia esse tipo de site. Mas assim que tiver um oportunidade estarei dando uma olhada e tentarei te ajudar nesse problema.
att,
Enviado: Ter, 24 Jun 2008 8:58 am
por vetis
Marques,
Veja se isso lhe ajuda!!
Selecionar tudo
SELECT
A.CD_CONTAGEM,
A.CD_PRODUTO,
B.QT_ANTERIOR,
B.QT_ESTOQUE AS QT_ATUAL
FROM (SELECT A.CD_CONTAGEM,A.CD_PRODUTO,SUM(A.QT_ESTOQUE) AS QT_ANTERIOR FROM DBAMV.COPIA_ESTOQUE GROUP BY A.CD_CONTAGEM,A.CD_PRODUTO) A
JOIN DBAMV.ITCONTAGEM B
ON A.CD_CONTAGEM = B.CD_CONTAGEM
AND A.CD_PRODUTO = B.CD_PRODUTO
WHERE
A.CD_CONTAGEM = 2189
ORDER BY
A.CD_PRODUTO ASC;
att,
Enviado: Ter, 24 Jun 2008 9:17 am
por vetis
Desculpe,
não tirei o 'A' da frente no sub-sect.
Segue abaixo o correto.
Selecionar tudo
SELECT
A.CD_CONTAGEM,
A.CD_PRODUTO,
B.QT_ANTERIOR,
B.QT_ESTOQUE AS QT_ATUAL
FROM (SELECT CD_CONTAGEM,CD_PRODUTO,SUM(QT_ESTOQUE) AS QT_ANTERIOR
FROM DBAMV.COPIA_ESTOQUE
GROUP BY CD_CONTAGEM,CD_PRODUTO) A
JOIN DBAMV.ITCONTAGEM B
ON A.CD_CONTAGEM = B.CD_CONTAGEM
AND A.CD_PRODUTO = B.CD_PRODUTO
WHERE
A.CD_CONTAGEM = 2189
ORDER BY
A.CD_PRODUTO ASC;
Veja se é isso mesmo que você deseja!
att,
Enviado: Ter, 24 Jun 2008 9:41 am
por marquesjr
vetis apresentou o seguinte erro:
Selecionar tudo
09:41:44 [SELECT - 0 row(s), 0.000 secs] [Error Code: 904, SQL State: 42000] ORA-00904: "B"."QT_ANTERIOR": invalid identifier
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 1 errors]
Enviado: Ter, 24 Jun 2008 9:58 am
por marquesjr
Substitui o B. pelo A. no QT_ANTERIOR, funcionou agradeço pela ajuda vetis, vou estudar mais as Sub-consulta.
Selecionar tudo
SELECT
A.CD_CONTAGEM,
A.CD_PRODUTO,
B.QT_ESTOQUE AS QT_ATUAL,
A.QT_ANTERIOR
FROM
(
SELECT
CD_CONTAGEM,
CD_PRODUTO,
SUM(QT_ESTOQUE) AS QT_ANTERIOR
FROM
DBAMV.COPIA_ESTOQUE
GROUP BY
CD_CONTAGEM,
CD_PRODUTO
)
A
JOIN
DBAMV.ITCONTAGEM B
ON
A.CD_CONTAGEM = B.CD_CONTAGEM
AND A.CD_PRODUTO = B.CD_PRODUTO
WHERE
A.CD_CONTAGEM = 2189
ORDER BY
A.CD_PRODUTO ASC;
Enviado: Ter, 24 Jun 2008 10:06 am
por vetis
Falow estamos sempre ai !
att,
Enviado: Ter, 24 Jun 2008 12:02 pm
por marquesjr
vetis, os quantitativo não estão totalizando por porduto, como exemplo o produto 17409 está aparecendo 2 vezes (40, 40)
Selecionar tudo
CD_CONTAGEM CD_PRODUTO QT_ATUAL QT_ANTERIOR
2189 17385 37 110
2189 17389 25 25
2189 17390 87 62
2189 17409 40 82
2189 17409 40 82
2189 17410 60 79
2189 17432 28 28
2189 17446 5 42
2189 17446 29 42
2189 17447 7 140
Enviado: Ter, 24 Jun 2008 12:11 pm
por vetis
Marques,
Deve haver dois registros para o mesmo produto, por isso quando se faz o join com a tabela B ele trás os dois.
Não é muito boinito mas utilizado o distinct para ver se resolver seu problema.
att,
Enviado: Ter, 24 Jun 2008 1:03 pm
por marquesjr
vetis perfeito o DISTINCT (bem lembrado). Só mais um pergunta...
Como faço para aplicar a função SUM() na coluna QT_ESTOQUE da tabela ITCONTAGEM?
Enviado: Ter, 24 Jun 2008 1:39 pm
por vetis
Para utilizar o sum, terá que fazer um group by.
Agora vai cair na questão no que você deseja encontra, tenta utilizar o sum o select , ai se não funcionar criar um sub-select da mesma maneira do outro.
att,