Página 1 de 1
Unir 2 consultas
Enviado: Ter, 05 Ago 2014 5:25 pm
por marquesjr
Boa noite pessoal.
Como posso unir (via CD_PRODUTO) o resultado dessas 2 consultas? De modo que o select resultante conste os campos ?
Selecionar tudo
SELECT
a.CD_PRODUTO,
a.CD_CONTAGEM
FROM
ITCONTAGEM a
WHERE
a.CD_CONTAGEM = 6551
Selecionar tudo
SELECT
h.CD_PRODUTO,
SUM(h.QT_ORCAMENTARIO)
FROM
COPIA_ESTOQUE h
WHERE
h.CD_CONTAGEM = 6551
GROUP BY
h.CD_PRODUTO
Re: Unir 2 consultas
Enviado: Qua, 06 Ago 2014 10:51 am
por stcoutinho
Olá marquesjr,
Pelo que entendi, o que você precisa mesmo fazer é relacionar as duas consultas (e não unir).
No SQL, você pode tratar estas duas queries como se fossem "views" .. e fazer SELECT e JOINS com as mesmas.
Você poderia fazer algo como :
Selecionar tudo
padrão "SQL antigo":
SELECT <colunas>
FROM (<primeira querie>) A,
(<segunda querie>) B
WHERE <condicoes>
NOVO padrão "ANSI":
SELECT <colunas>
FROM (<primeira querie>) A
JOIN (<segunda querie>) B
ON (<condicoes>)
Só que você precisa tomar alguns cuidados:
A) Colunas com AVG, COUNT, SUM, etc precisam ter um alias/cabeçalho associado
B) As duas queries que você levantou .. elas retornam exatamente a mesma quantidade de produtos? Se não retornarem, você precisa avaliar se pelo menos uma delas apresenta TODOS os produtos e usar um OUTER JOIN (que poderia ser um LEFT OUTER JOIN ou um RIGHT OUTER JOIN - "no padrão ansi" - ou o uso de (+) na antigo padrão oracle)
C) Se NENHUMA das duas queries apresentam todos os produtos e você precisa de uma relação completa, talvez você tenha que adicionar uma terceira tabela (ex: produtos) na sua querie.
Abraços,
Sergio Coutinho
Re: Unir 2 consultas
Enviado: Qua, 06 Ago 2014 1:58 pm
por marquesjr
stcoutinho, o meu acesso é somente consulta não tenho privilégios de criar visões.
Re: Unir 2 consultas
Enviado: Qua, 06 Ago 2014 2:30 pm
por stcoutinho
Olá Marquesjr,
Na verdade, você não precisa criar nenhuma view.
O que eu estou tentando explicar é que você pode usar sub-queries como se fossem "views".
Exemplo: se você tem uma view de nome "VW_DUAL" cuja querie seria
Você pode fazer a mesma querie de consulta de duas maneiras:
Observe que na "segunda opção" não estou usando a "view" e sim uma "sub-querie".
Suas queries que você postou aqui podem ser consultadas da mesma forma. Coloque ela entre parênteses, coloque alias/apelidos nelas e monte um SQL que façam JOIN entre estes dois resultados.
Pesquise um pouco mais sobre SUB-QUERIES e como aplicar a mesma no SQL. Como disse na explicação anterior, você consegue resolver tudo em uma querie, e sem necessidade de criar VIEWS ou outros objetos.
Abraços,
Sergio
Re: Unir 2 consultas
Enviado: Qua, 06 Ago 2014 2:35 pm
por stcoutinho
Olá Marquesjr,
Pesquisei um pouco mais e o termo correto seria "IN-LINE VIEW".
Mas não se trata de uma VIEW como a que nós costumamos criar no banco de dados.
Veja se este link esclarece um pouco sua dúvida:
http://www.orafaq.com/wiki/Inline_view
Abraços,
Sergio
Re: Unir 2 consultas
Enviado: Qua, 06 Ago 2014 3:45 pm
por marquesjr
stcoutinho, olhando aqui fiz dessa forma:
Selecionar tudo
SELECT
CONTAGEM,
PRODUTO,
SUM(QT_ESTOQUE) AS QT_APOS,
SUM(QT_ORCAMENTO) AS QT_ANTERIOR
FROM
(
SELECT
a.CD_CONTAGEM CONTAGEM,
a.CD_PRODUTO PRODUTO,
SUM(a.QT_ESTOQUE)QT_ESTOQUE,
NULL QT_ORCAMENTO
FROM
ITCONTAGEM a
WHERE
a.CD_CONTAGEM = 6551
GROUP BY
a.CD_CONTAGEM,
a.CD_PRODUTO,
a.QT_ESTOQUE
UNION
SELECT
h.cd_contagem CONTAGEM,
h.CD_PRODUTO PRODUTO,
NULL QT_ESTOQUE,
SUM(h.QT_ORCAMENTARIO) QT_ORCAMENTO
FROM
COPIA_ESTOQUE h
WHERE
h.CD_CONTAGEM = 6551
GROUP BY
h.cd_contagem,
h.CD_PRODUTO,
h.QT_ORCAMENTARIO)
GROUP BY
CONTAGEM,
PRODUTO
Re: Unir 2 consultas
Enviado: Qui, 09 Fev 2017 11:45 am
por endrigocm
Consegui utilizando esta sintaxe.
Selecionar tudo
SELECT A.*, B.*,C.* FROM (SELECT * FROM DUAL) A,(SELECT * FROM DUAL) B,(SELECT * FROM DUAL) C;