none
Ajuda Query Sem repitir valor RRS feed

  • Pergunta

  • SELECT s.id, s.id_empresa, e.id AS codigoempresa, e.NomeF AS nomeempresa, t.nome AS tipo, e.Endereco, e.Numero, b.nome AS bairro, e.Complemento, s.id_segmento, q.id AS codigosegmento, q.nome AS nomesegmento, s.id_filial, c.id AS codigofilial, c.nome AS nomefilial, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, m.cor_da_fonte, m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone FROM segmento_empresa AS s INNER JOIN Empresa AS e ON e.id = s.id_empresa AND s.id = e.id INNER JOIN seguimento AS q ON q.id = s.id_segmento INNER JOIN Cidades AS c ON c.id = s.id_filial LEFT OUTER JOIN tipodeendereco AS t ON t.id = e.id_tipoendereco LEFT OUTER JOIN Bairros AS b ON b.id = e.id_bairro INNER JOIN situacao AS m ON m.id = e.id_situacao INNER JOIN telefone_empresa AS x ON x.id_empresa = e.id GROUP BY s.id, s.id_empresa, e.id, e.NomeF, t.nome, e.Endereco, e.Numero, b.nome, e.Complemento, s.id_segmento, q.id, q.nome, s.id_filial, c.id, c.nome, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, m.cor_da_fonte, m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone ORDER BY m.ordenacao 

     

    Bom galera como segue a minha quey eu preciso fazer ele trazer os telefones sem repetir porque acontece que cada empresa pode ter mais de um telefone e neste caso eu gostaria de trazer sómente 1 telefone dela o TOP 1 mas não consigo de nenhum jeito.. alguem pode me auxiliar por favor? desde ja agradecido!!!

    sexta-feira, 14 de janeiro de 2011 16:53

Respostas

  • Jefferson,

    teste este script (para sql 2005 ou 2008)

    ;with cte_dados
    as
    (
    SELECT s.id, s.id_empresa, e.id AS codigoempresa, e.NomeF AS nomeempresa, t.nome AS tipo, e.Endereco, 
      e.Numero, b.nome AS bairro, e.Complemento, s.id_segmento, q.id AS codigosegmento, q.nome AS nomesegmento, 
      s.id_filial, c.id AS codigofilial, c.nome AS nomefilial, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, 
      m.cor_da_fonte, m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone,
      ROW_NUMBER() over(partition by s.id_empresa order by s.id_empresa,x.telefone) as contador
    FROM segmento_empresa AS s 
      INNER JOIN Empresa AS e ON e.id = s.id_empresa AND s.id = e.id 
      INNER JOIN seguimento AS q ON q.id = s.id_segmento 
      INNER JOIN Cidades AS c ON c.id = s.id_filial 
      LEFT OUTER JOIN tipodeendereco AS t ON t.id = e.id_tipoendereco 
      LEFT OUTER JOIN Bairros AS b ON b.id = e.id_bairro 
      INNER JOIN situacao AS m ON m.id = e.id_situacao 
      INNER JOIN telefone_empresa AS x ON x.id_empresa = e.id 
    GROUP BY s.id, s.id_empresa, e.id, e.NomeF, t.nome, e.Endereco, e.Numero, 
      b.nome, e.Complemento, s.id_segmento, q.id, q.nome, s.id_filial, c.id, 
      c.nome, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, m.cor_da_fonte, 
      m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone 
    )
    select * from cte_dados where contador=1 ORDER BY ordenacao 
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    sábado, 15 de janeiro de 2011 03:24

Todas as Respostas

  • Jeferson,

     

    Não sei se existe uma maneira mas eficaz, porem a query abaixo funcionou em meu teste, tente adapta-la ao seu caso, creio que possa ajuda:

    select distinct a.id, (select top 1 b.nome from teste b where b.id=a.id )from teste a

    sexta-feira, 14 de janeiro de 2011 19:33
    Moderador
  • Costumo fazer assim =)

     

     

     

    declare

     

    @Empresa table (idEmpresa int , nome varchar(200))

    declare

     

    @EmpresaTelefone table(idEmpresaTelefone int ,idEmpresa int, numero varchar(200))

    insert

     

    into @Empresa values (1,'Empresa 001')

    insert

     

    into @Empresa values (2,'Empresa 002')

    insert

     

    into @EmpresaTelefone values (1,1,'00012')

    insert

     

    into @EmpresaTelefone values (2,1,'00013')

    insert

     

    into @EmpresaTelefone values (1,2,'00014')

    insert

     

    into @EmpresaTelefone values (2,2,'00015')

     

    --Duplica empresa

    select

     

    * from @Empresa e inner join @EmpresaTelefone t

    on

     

    e.idEmpresa = t.idEmpresa

     

    --Traz somente um registro por empresa

    select

     

    * from @Empresa e inner join @EmpresaTelefone t

    on

     

    e.idEmpresa = t.idEmpresa

    and

     

    t.idEmpresaTelefone = (select min(idEmpresaTelefone) as idEmpresaTelefone from @EmpresaTelefone a where a.idEmpresa = e.idEmpresa )


    Marcelo - http://brmap.spaces.live.com/
    sexta-feira, 14 de janeiro de 2011 23:40
  • Jefferson,

    teste este script (para sql 2005 ou 2008)

    ;with cte_dados
    as
    (
    SELECT s.id, s.id_empresa, e.id AS codigoempresa, e.NomeF AS nomeempresa, t.nome AS tipo, e.Endereco, 
      e.Numero, b.nome AS bairro, e.Complemento, s.id_segmento, q.id AS codigosegmento, q.nome AS nomesegmento, 
      s.id_filial, c.id AS codigofilial, c.nome AS nomefilial, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, 
      m.cor_da_fonte, m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone,
      ROW_NUMBER() over(partition by s.id_empresa order by s.id_empresa,x.telefone) as contador
    FROM segmento_empresa AS s 
      INNER JOIN Empresa AS e ON e.id = s.id_empresa AND s.id = e.id 
      INNER JOIN seguimento AS q ON q.id = s.id_segmento 
      INNER JOIN Cidades AS c ON c.id = s.id_filial 
      LEFT OUTER JOIN tipodeendereco AS t ON t.id = e.id_tipoendereco 
      LEFT OUTER JOIN Bairros AS b ON b.id = e.id_bairro 
      INNER JOIN situacao AS m ON m.id = e.id_situacao 
      INNER JOIN telefone_empresa AS x ON x.id_empresa = e.id 
    GROUP BY s.id, s.id_empresa, e.id, e.NomeF, t.nome, e.Endereco, e.Numero, 
      b.nome, e.Complemento, s.id_segmento, q.id, q.nome, s.id_filial, c.id, 
      c.nome, m.situacao, m.Apelido, m.ordenacao, m.cor_de_fundo, m.cor_da_fonte, 
      m.cor_da_fonte_selecionada, e.site, e.Email, x.telefone 
    )
    select * from cte_dados where contador=1 ORDER BY ordenacao 
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    sábado, 15 de janeiro de 2011 03:24
  • Cara funcionou perfeitamente... obrigado... ;D

     

    sábado, 15 de janeiro de 2011 12:19