none
FUNÇÃO UNION RRS feed

  • 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

    quarta-feira, 6 de julho de 2011 17:31

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
    quarta-feira, 6 de julho de 2011 18:33
    Moderador

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
    quarta-feira, 6 de julho de 2011 17:36
    Moderador
  • 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

     

    quarta-feira, 6 de julho de 2011 18:29
  • 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
    quarta-feira, 6 de julho de 2011 18:33
    Moderador
  • Obrigada.

     

    quarta-feira, 6 de julho de 2011 20:16
  • 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
    quarta-feira, 6 de julho de 2011 20:24
    Moderador