On Wed, Aug 28, 2013 at 11:05 AM, Felipe Pamboukian < felipe.pambouk...@ibope.com> wrote:
> Bom dia, > > Gostaria de fazer um case com inner join mais não estou conseguindo, > alguém posso de dar uma ajuda? > > > select mte.idrepesportesmt, esp.codesporte, esp.esporte, > sb.codsubesporte, sb.subesporte, mte.iduser, u.login, mt.tipomidia, > rd.emissora, mte.coletado, mt.dia, mt.mes, mt.ano, rd.codrede, > mt.rotulo, > case when mt.tipomidia = 'VHS' then pr.praca else 'NACIONAL - NET' end > as praca, > case when mte.coletado = '0' then 'Não Coletar' else 'Coletar' end as > coletadoo, > case when mte.estado = '0' then 'Pendente' > when mte.estado = '1' then 'Concluído' > when mte.estado = '2' then 'Em andamento' end as estado, > case when mte.estado_user = '0' then 'Pendente' > when mte.estado_user = '1' then 'Concluído' > when mte.estado_user = '2' then 'Em andamento' end as > estado_usuario > from repesportesmt mte > inner join cm_esporte esp on esp.codesporte = mte.codesporte > inner join reportagemmt mt on mt.idreportagemmt = mte.idreportagemmt > inner join jvtv_redes rd on rd.codrede = mt.codrede > inner join cm_subesporte sb on sb.codsubesporte = mte.codsubesporte > inner join usuarios u on u.iduser = mte.iduser > * case when mt.tipomidia = 'VHS' then * > * inner join cli_midia mi on mi.rotulo = mt.rotulo* > * inner join jvtv_pracas pr on pr.codpraca = mi.codpraca_grav* > * else* > * inner join cli_dia d on d.rotulodia = mt.rotulo* > * inner join jvtv_pracas pr on pr.codpraca = d.codpraca* > * end* > where mt.ano = :ano and mt.mes = :mes and mte.estado = :estado > order by rd.emissora, pr.praca, mt.rotulo, mt.dia, esp.esporte, > sb.subesporte > > Me parece que o ideal seria fazer isso num condicional em sua aplicação ou uma função no banco. Não é possível selecionar condicionalmente a tabela ao realizar JOIN. Uma saída via SQL é realizar um LEFT JOIN (veja que não é equivalente, vai depender de questões semânticas): ... left join cli_midia mi on mi.rotulo = mt.rotulo left join cli_dia d on d.rotulodia = mt.rotulo inner join jvtv_pracas pr on pr.codpraca = case mt.tipomidia when 'VHS' then mi.codpraca_grav else d.codpraca end ... Acho ("acho") que assim funciona, mas com certeza tem implicações negativas quanto à performance. Atenciosamente, -- Matheus de Oliveira Analista de Banco de Dados Dextra Sistemas - MPS.Br nível F! www.dextra.com.br/postgres
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral