Usuário com melhor resposta
FUNÇÃO UNION

Pergunta
-
Boa tarde pessoal do Forum!
Estou com um problema ao usar a funcao UNION, pois usando essa funcao os meus dois SELECT tem que ter a mesma quantidade de campos, então os campos que tem no meu SELECT 2 e não tem no meu SELECT 1 eu coloco eles com o valor NULL, e é ai que esta me dando problema, pois esta duplicando o meu documento, ex:
CAMPOS: NOME DOCUMENTO CENTRO DE CUSTO
FLAVIO NULL NULL
FLAVIO 05 TI
OBS: O QUE ESTÁ SAINDO NULL SAO OS CAMPOS DO MEU SELECT 1, NAO QUERO QUE APARECA ESSA LINHA PRIMEIRA LINHA QUE ESTA COM O VALOR NULL. EU SO COLOQUEI QUE O CAMPO E NULL NO MEU PRIMEIRO SELECT POIS ESSES CAMPOS TEM NO MEU SELECT 1, MAS TEM NO 2, CORRETO?
Alguem poderia me ajudar?
Desde ja obrigada
Respostas
-
Novaes, Segue:
SELECT b.Cliente, b.Documento, b.CentroCusto, b.VlrNominal
FROM
(SELECT A.NOME as CLIENTE, NULL as DOCUMENTO, NULL as CENTROCUSTO, NULL as VLRNOMINAL
FROM GN_PESSOAS A --INNER JOIN FN_DOCUMENTOS B ON A.HANDLE = B.PESSOA
WHERE A.EHCLIENTE='S' --AND A.CODIGO=4
--AND B.HANDLE <> NULL
UNION
SELECT A.NOME as CLIENTE, D.DOCUMENTODIGITADO as DOCUMENTO, F.NOME as CENTROCUSTO, D.VALORNOMINAL as VLRNOMINAL
FROM GN_PESSOAS A
INNER JOIN FN_DOCUMENTOS B ON B.PESSOA=A.HANDLE
INNER JOIN FN_TIPOSDOCUMENTOS C ON C.HANDLE=B.TIPODOCUMENTO
INNER JOIN FN_DOCUMENTOS D ON D.DOCUMENTOORIGEM=B.HANDLE
INNER JOIN CM_ITENS E ON E.DOCUMENTO=D.HANDLE
INNER JOIN CT_CC F ON F.HANDLE=E.CENTROCUSTO
LEFT JOIN GN_PROJETOS G ON G.HANDLE=E.PROJETO
INNER JOIN FN_CONTAS H ON H.HANDLE=E.CONTAFINANCEIRA
INNER JOIN PD_FAMILIASPRODUTOS I ON I.HANDLE=E.FAMILIA
INNER JOIN PD_PRODUTOS J ON J.HANDLE=E.PRODUTO
WHERE A.EHCLIENTE='S') B
WHERE b.Cliente IS NOT NULL
AND b.Documento IS NOT NULL
AND b.CentroCusto IS NOT NULL
AND b.VLwNominal IS NOT NULL
Fabrizzio A. Caputo
Certificações: Oracle OCA 11g, MCTS SQL Server 2008 Implementation and Maintenance
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Fredy Esmeraldo quinta-feira, 7 de julho de 2011 16:00
- Marcado como Resposta NovaesB sexta-feira, 8 de julho de 2011 17:02
Todas as Respostas
-
Novaes,
Eu entendi sim o que voce quer fazer, veja se o exemplo abaixo te ajuda:
--CRIAÇÂO DE TABELAS
declare @t1 table(id int)
declare @t2 table(id int, nome varchar(100))
--CARGA DE DADOS
insert into @t1 values
(1),(2)
insert into @t2 values
(1,'fabrizzio'),(2,'giovanni'),(3,'marco')
--SELECT
select * from(
select id, null as nome from @t1
union
select id, nome from @t2
) a
where nome is not null
Se voce colcoar diretamente o NULL e querer com o union excluir esses registros, não ira funcionar, pois são linhas diferentes, o union apenas resolve linhas identicas para voce.
Fabrizzio A. Caputo
Certificações: Oracle OCA 11g, MCTS SQL Server 2008 Implementation and Maintenance
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Fredy Esmeraldo quarta-feira, 6 de julho de 2011 17:54
-
Fabrizzio, o meu select esta assim:
SELECT A.NOME CLIENTE, NULL DOCUMENTO, NULL CENTROCUSTO, NULL VLRNOMINAL
FROM GN_PESSOAS A --INNER JOIN FN_DOCUMENTOS B ON A.HANDLE = B.PESSOA
WHERE A.EHCLIENTE='S' --AND A.CODIGO=4
--AND B.HANDLE <> NULL
UNION
SELECT A.NOME CLIENTE, D.DOCUMENTODIGITADO DOCUMENTO, F.NOME CENTROCUSTO, D.VALORNOMINAL VLRNOMINAL
FROM GN_PESSOAS A
INNER JOIN FN_DOCUMENTOS B ON B.PESSOA=A.HANDLE
INNER JOIN FN_TIPOSDOCUMENTOS C ON C.HANDLE=B.TIPODOCUMENTO
INNER JOIN FN_DOCUMENTOS D ON D.DOCUMENTOORIGEM=B.HANDLE
INNER JOIN CM_ITENS E ON E.DOCUMENTO=D.HANDLE
INNER JOIN CT_CC F ON F.HANDLE=E.CENTROCUSTO
LEFT JOIN GN_PROJETOS G ON G.HANDLE=E.PROJETO
INNER JOIN FN_CONTAS H ON H.HANDLE=E.CONTAFINANCEIRA
INNER JOIN PD_FAMILIASPRODUTOS I ON I.HANDLE=E.FAMILIA
INNER JOIN PD_PRODUTOS J ON J.HANDLE=E.PRODUTO
WHERE A.EHCLIENTE='S'
Como ficaria nesse select?
Muito Obrigada
-
Novaes, Segue:
SELECT b.Cliente, b.Documento, b.CentroCusto, b.VlrNominal
FROM
(SELECT A.NOME as CLIENTE, NULL as DOCUMENTO, NULL as CENTROCUSTO, NULL as VLRNOMINAL
FROM GN_PESSOAS A --INNER JOIN FN_DOCUMENTOS B ON A.HANDLE = B.PESSOA
WHERE A.EHCLIENTE='S' --AND A.CODIGO=4
--AND B.HANDLE <> NULL
UNION
SELECT A.NOME as CLIENTE, D.DOCUMENTODIGITADO as DOCUMENTO, F.NOME as CENTROCUSTO, D.VALORNOMINAL as VLRNOMINAL
FROM GN_PESSOAS A
INNER JOIN FN_DOCUMENTOS B ON B.PESSOA=A.HANDLE
INNER JOIN FN_TIPOSDOCUMENTOS C ON C.HANDLE=B.TIPODOCUMENTO
INNER JOIN FN_DOCUMENTOS D ON D.DOCUMENTOORIGEM=B.HANDLE
INNER JOIN CM_ITENS E ON E.DOCUMENTO=D.HANDLE
INNER JOIN CT_CC F ON F.HANDLE=E.CENTROCUSTO
LEFT JOIN GN_PROJETOS G ON G.HANDLE=E.PROJETO
INNER JOIN FN_CONTAS H ON H.HANDLE=E.CONTAFINANCEIRA
INNER JOIN PD_FAMILIASPRODUTOS I ON I.HANDLE=E.FAMILIA
INNER JOIN PD_PRODUTOS J ON J.HANDLE=E.PRODUTO
WHERE A.EHCLIENTE='S') B
WHERE b.Cliente IS NOT NULL
AND b.Documento IS NOT NULL
AND b.CentroCusto IS NOT NULL
AND b.VLwNominal IS NOT NULL
Fabrizzio A. Caputo
Certificações: Oracle OCA 11g, MCTS SQL Server 2008 Implementation and Maintenance
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Sugerido como Resposta Fredy Esmeraldo quinta-feira, 7 de julho de 2011 16:00
- Marcado como Resposta NovaesB sexta-feira, 8 de julho de 2011 17:02
-
-
Novaes,
Se te ajudou, marque como util, se solucionou o seu problema, marque como resposta, assim podera ajudar outros usuarios que venham ter a mesma duvida.
Fabrizzio A. Caputo
Certificações: Oracle OCA 11g, MCTS SQL Server 2008 Implementation and Maintenance
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Blog Empresa: www.tripletech.com.br/blog
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com