none
Como fazer para agrupar valores varchar em uma única linha. RRS feed

  • Pergunta

  • Possuo uma tabela chamada envio_email, onde possuo os campos:

    codigo           tipo                 valor

    1                  email_To          testeA@teste.com.br

    2                  email_CC         testeB@teste.com.br

    3                  email_CCO       testeC@teste.com.br

     

    Preciso fazer insert em outra tabela, porém está sendo inserido 3 linhas.

    Este é o meu select:

    insert into......

     select distinct 'admin@admin.com','Usuario_1',
                           case when codigo = 1 then valor else '' end as a,
                           case when codigo = 2 then valor else '' end as b,
                           case when codigo = 3 then valor else '' end as c    
               from envio_email where codigo in (1,2,3) 
               group by codigo, valor

    Está inserindo 3 linhas:

    email_remetente          nome_remetente     email_To                          email_CC                           emailCCO

    admin@admin.com       Usuario_1                                                                                                 testeC@teste.com.br

    admin@admin.com       Usuario_1                                                        testeB@teste.com.br

    admin@admin.com       Usuario_1                testeA@teste.com.br

    Preciso que fique assim:

    email_remetente          nome_remetente     email_To                          email_CC                           emailCCO

    admin@admin.com       Usuario_1                testeA@teste.com.br         testeB@teste.com.br         testeC@teste.com.br


    Como posso fazer ?



    • Editado Fe RT quarta-feira, 4 de novembro de 2015 16:10
    quarta-feira, 4 de novembro de 2015 16:04

Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    insert into --...
        select
            'admin@admin.com',
            'Usuario_1',
            max(case when codigo = 1 then valor end) as a,
            max(case when codigo = 2 then valor end) as b,
            max(case when codigo = 3 then valor end) as c    
        from envio_email 
        where 
            codigo in (1,2,3) 
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fe RT quarta-feira, 4 de novembro de 2015 16:38
    quarta-feira, 4 de novembro de 2015 16:15

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    insert into --...
        select
            'admin@admin.com',
            'Usuario_1',
            max(case when codigo = 1 then valor end) as a,
            max(case when codigo = 2 then valor end) as b,
            max(case when codigo = 3 then valor end) as c    
        from envio_email 
        where 
            codigo in (1,2,3) 
    

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Fe RT quarta-feira, 4 de novembro de 2015 16:38
    quarta-feira, 4 de novembro de 2015 16:15
  • Use o PIVOT:

    create table mail (cd_campo  int, dc_ident  varchar(50),vl_campo varchar(50))
    insert into mail values (1,'email_To','testeA@teste.com.br'),(2,'email_CC','testeB@teste.com.br'),(3,'email_CCO','testeC@teste.com.br')
    
    select email_remetente, nome_remetente, email_to,email_cc,email_cco
    from
    (
      select 'admin@teste.com' email_remetente,'Admin' nome_remetente, vl_campo,dc_ident
      from mail
    ) as pvt
    PIVOT (max(vl_campo) FOR dc_ident in (email_to,email_cc,email_cco)) as pivoteado
    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    quarta-feira, 4 de novembro de 2015 16:25
  • Funcionou...era só usar o max.

    Muito obrigado

    quarta-feira, 4 de novembro de 2015 16:37