none
select ( o mais distinct possivel ) from tabela :) RRS feed

  • Discussão Geral

  • Pessoal,

    Possuo uma base de dados de clientes e preciso selecionar X registros sendo que, a cidade deve ser a mais variada possível porém, se eu usar o distinct ele obriga que não se repita a cidade, mas em alguns casos eu posso ter 200 registros onde 50 são de uma mesma cidade e neste caso eu não conseguiria obter 100 registros 100% diferentes.

    Existe como montar uma query onde  a logica seria algo assim :

    Procure 100 registros dentro desta tabela com cidades diferentes, mas caso não consiga ter 100 diferentes, repita a menor quantidade de vezes possível, cada um ? 

    Desta forma se só existirem 80 cidades diferentes no banco, ele pode passar a pegar 2 usuarios da mesma cidade, 3 usuarios, etc.. enfim.. preciso trazer sempre 100 registros mas o mais variado possível, em relação a cidade.

    Algum saberia como fazer ?

    Abraços

    quinta-feira, 13 de dezembro de 2012 13:08

Todas as Respostas

  • Rafael Metring,

    Tenta adaptar o codigo abaixo, dessa forma você vai estar consultando os 100 primeiros clientes das cidades que tem o menor numero de clientes:

    Select top 100
     codigo_cliente,
     nome_cliente
    From
     Clientes c
     inner join
     (Select cidade, count(*) from TabelaClientes group by cidade order by 2) B on c.cidade = b.cidade
    


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 13:29
  • Marcos, obrigado por seu retorno mas não quero saber quem tem menos clientes. 

    O que preciso é trazer o maior número de clientes de cidades diferentes.

    Se puxo 10 registros e possuo pelo menos 10 cidades diferentes no cadastro de cliente ele tem que me trazer 10 clientes de cidades diferentes.
    Se puxo 10 registros e possuo apenas 5 cidades diferentes entre os cadastros, ele vai ter que trazer 2 clientes de cada cidade..
    Se todo mundo é da mesma cidade, então ele vai ter que trazer 10 pessoas da mesma cidade, já que não tem jeito mesmo...

    Espero ter esclarecido melhor..

    quinta-feira, 13 de dezembro de 2012 14:31
  • Rafael, ve se isso te ajuda:

    CREATE TABLE #Clientes (
    	NOMECLIENTE		VARCHAR(100),
    	CIDADE			VARCHAR(100)
    )
    
    INSERT INTO #Clientes VALUES ('MARIA','SÃO PAULO')
    INSERT INTO #Clientes VALUES ('JOSE','SÃO PAULO')
    INSERT INTO #Clientes VALUES ('JOAO','RIO DE JANEIRO')
    INSERT INTO #Clientes VALUES ('ANA','RIO DE JANEIRO')
    INSERT INTO #Clientes VALUES ('PAULA','SÃO BERNARDO')
    INSERT INTO #Clientes VALUES ('CESAR','TABATINGA')
    INSERT INTO #Clientes VALUES ('ANDRE','COPACABANA')
    INSERT INTO #Clientes VALUES ('MONICA','GUARULHOS')
    INSERT INTO #Clientes VALUES ('RAQUEL','MARILIA')
    INSERT INTO #Clientes VALUES ('ROSANA','MARINGA')
    INSERT INTO #Clientes VALUES ('FABIO','MARINGA')
    INSERT INTO #Clientes VALUES ('CARLOS','BELO HORIZONTE')
    
    SELECT TOP 10 CIDADE
    	, NOMECLIENTE
    	, ROW_NUMBER() OVER (PARTITION BY CIDADE ORDER BY CIDADE)
    FROM #Clientes
    ORDER BY 3

    Flw!


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 13 de dezembro de 2012 15:46
  • Perfeito fb_dev.. Era exatamente isso que eu precisava..

    Valeu mesmo !

    quinta-feira, 13 de dezembro de 2012 17:28