none
concatenar campos iguais conteudo diferente RRS feed

  • Pergunta

  • Pessoal boa tarde,

    Preciso de uma ajuda, eu tenho duas views que tem um campo igual com conteudos diferentes, essas views sao formadas

    a partir de tabelas diferentes que tem um campo igual chamado (NUMRPS)

    Cada tabela armazena uma sequencia de notas fiscais, porem nao sao numeros iguais.. exemplo:

    Tabela1 Campo NUMRPS
                              1
                              2
                              3
                              4
                              8
                              9

    Tabela2 Campo NUMRPS
                               5
                               6
                               7
                               10
                               11

    As tabelas nao tem ligação nenhuma com a outra ou seja nao tem chave estrangeira, por isso foram feitas as views
    e agora preciso fazer um select nas views para que possa pegar e concatenar os dois campos de forma que consiga
    deixar dessa forma:

    NUMRPS
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    Alguem pode me ajudar com isso? 

    quarta-feira, 4 de outubro de 2017 17:55

Respostas

  • Luis,

    A mesma quantidade de campo do primeiro "SELECT" tem que ser no segundo, isso também se aplica no "GROUP BY", verifica isso que deve funcionar.

    • Marcado como Resposta Luis Padilha quarta-feira, 4 de outubro de 2017 19:30
    quarta-feira, 4 de outubro de 2017 18:28
  • Boa tarde,

    Uma ideia é, faz uma tabela temporária com todos os campos em comum (tblwrirecepcao.PK_Recepcao as Titulo_RI,max(tblwrititulos.DataUltimoRegistro)asData_Envio,tblwrirecepcao.NumRPS as _NUMRPS)...

    e em vez de fazer UNION, faça o insert nessa tabela temporária com o select do union com o resultado final da tabela temporária você retorna ela ao final com o order by _NUMRPS.

    select * from #temporaria order by _NUMRPS
    Att,



    • Marcado como Resposta Luis Padilha segunda-feira, 9 de outubro de 2017 15:37
    sexta-feira, 6 de outubro de 2017 18:08

Todas as Respostas

  • SELECT NUMRPS FROM Tabela1
    UNION ALL
    SELECT NUMRPS FROM Tabela2


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 4 de outubro de 2017 18:03
  • seria mais ou menos isso que preciso, mas deu erro:

    set dateformat dmy

    select tblwrirecepcao.PK_Recepcao as Titulo_RI, max(tblwrititulos.DataUltimoRegistro) as Data_Envio, tblwrirecepcao.NumRPS,

    tblwrirecepcao.VlrTotCustas

    from  tblwrititulos

    inner join tblwrirecepcao on tblwrirecepcao.PK_Recepcao = tblwrititulos.FK_tblWRIRecepcaoRecepcao

    where tblwrirecepcao.NumRPS > 600

    and tblwrirecepcao.VlrTotCustas <> '0.00'

    group by tblwrititulos.DataUltimoRegistro,tblwrirecepcao.PK_Recepcao,tblwrirecepcao.NumRPS,

    tblwrirecepcao.VlrTotCustas

    order by tblwrirecepcao.NumRPS asc

    UNION ALL

    select tblwricertidao.Pk_NrPedido As Certidao_RI, max(tblwricertidao.DataFinalRetirada) as Data_Certidao_Enviada, tblwricertidao.NumRPS

    from tblwricertidao

    where tblwricertidao.NumRPS > 600

    and tblwricertidao.VlrTotalCota <> '0.00'

    group by tblwricertidao.NumRPS, tblwricertidao.Pk_NrPedido,tblwricertidao.DataFinalRetirada

    order by tblwricertidao.NumRPS

    quarta-feira, 4 de outubro de 2017 18:07
  • Boa tarde Luís!

    A resposta do amigo acima está perfeita, mas pelo sentido da sua publicação eu acrescentaria apenas um "ORDER BY" para ordenar da forma que você descreveu, então ficaria assim:

    SELECT NUMRPS FROM Tabela1 WITH(NOLOCK)
    UNION ALL
    SELECT NUMRPS FROM Tabela2 WITH(NOLOCK)
    ORDER BY NUMRPS ASC;

    Acrescentei o "WITH(NOLOCK)" para otimizar sua busca, caso tenha muito registro.

    Espero ter ajudado, abraços!


    quarta-feira, 4 de outubro de 2017 18:11
  • eu vou ordernar por qual campo o NUMRPS, ja que estao em tabelas diferentes?
    quarta-feira, 4 de outubro de 2017 18:17
  • Luis, poe o "ORDER BY" somente no final de tudo, pois usando o "UNION ALL" ele acaba anulando, usando seu exemplo ficaria assim:

    select    tblwrirecepcao.PK_Recepcao as Titulo_RI,max(tblwrititulos.DataUltimoRegistro)asData_Envio,tblwrirecepcao.NumRPS as _NUMRPS,

    from  tblwrititulos

    inner join tblwrirecepcao on tblwrirecepcao.PK_Recepcao =tblwrititulos.FK_tblWRIRecepcaoRecepcao

    where tblwrirecepcao.NumRPS > 600

    and tblwrirecepcao.VlrTotCustas <> '0.00'

    group by tblwrititulos.DataUltimoRegistro,tblwrirecepcao.PK_Recepcao,tblwrirecepcao.NumRPS,

    tblwrirecepcao.VlrTotCustas

    UNION ALL

    select    tblwricertidao.Pk_NrPedido As Certidao_RI,max(tblwricertidao.DataFinalRetirada)asData_Certidao_Enviada,tblwricertidao.NumRPS as _NUMRPS

    from tblwricertidao

    where tblwricertidao.NumRPS > 600

    and tblwricertidao.VlrTotalCota <> '0.00'

    group by tblwricertidao.NumRPS, tblwricertidao.Pk_NrPedido,tblwricertidao.DataFinalRetirada

    order  by_NUMRPS

    Se você notar, removi um campo do primeiro select, pois quando se faz "UNION ALL" os campos do "SELECT" tem que ser identico.



    • Editado Luiz Lenire quarta-feira, 4 de outubro de 2017 18:27
    quarta-feira, 4 de outubro de 2017 18:22
  • Certo, deu este erro:

    Msg 205, Level 16, State 1, Line 1

    All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

    quarta-feira, 4 de outubro de 2017 18:26
  • Luis,

    A mesma quantidade de campo do primeiro "SELECT" tem que ser no segundo, isso também se aplica no "GROUP BY", verifica isso que deve funcionar.

    • Marcado como Resposta Luis Padilha quarta-feira, 4 de outubro de 2017 19:30
    quarta-feira, 4 de outubro de 2017 18:28
  • Boa tarde,

    Uma ideia é, faz uma tabela temporária com todos os campos em comum (tblwrirecepcao.PK_Recepcao as Titulo_RI,max(tblwrititulos.DataUltimoRegistro)asData_Envio,tblwrirecepcao.NumRPS as _NUMRPS)...

    e em vez de fazer UNION, faça o insert nessa tabela temporária com o select do union com o resultado final da tabela temporária você retorna ela ao final com o order by _NUMRPS.

    select * from #temporaria order by _NUMRPS
    Att,



    • Marcado como Resposta Luis Padilha segunda-feira, 9 de outubro de 2017 15:37
    sexta-feira, 6 de outubro de 2017 18:08